Did stuff
This commit is contained in:
parent
366ac05225
commit
8d15e300b7
2 changed files with 171 additions and 41 deletions
|
@ -1,4 +1,4 @@
|
||||||
@ hence core lib
|
; hence core lib
|
||||||
core:
|
core:
|
||||||
core_mem:
|
core_mem:
|
||||||
.define CORE_MEM_PRG, (0 * 1024)
|
.define CORE_MEM_PRG, (0 * 1024)
|
||||||
|
@ -40,7 +40,7 @@ core:
|
||||||
.define CORE_ALU_INV, 0x11
|
.define CORE_ALU_INV, 0x11
|
||||||
.define CORE_ALU_RND, 0x12
|
.define CORE_ALU_RND, 0x12
|
||||||
|
|
||||||
@ hence standard lib
|
; hence standard lib
|
||||||
STD:
|
STD:
|
||||||
.define STD_U8_MAX, 0xff
|
.define STD_U8_MAX, 0xff
|
||||||
.define STD_U16_MAX, 0xffff
|
.define STD_U16_MAX, 0xffff
|
||||||
|
@ -65,42 +65,42 @@ end_input:
|
||||||
dbg
|
dbg
|
||||||
|
|
||||||
main:
|
main:
|
||||||
@ loop body
|
; loop body
|
||||||
loop:
|
loop:
|
||||||
@ read key from stdin
|
; read key from stdin
|
||||||
ts CORE_MEM_KEY
|
ts CORE_MEM_KEY
|
||||||
get
|
get
|
||||||
|
|
||||||
@ check if key is newline (0x0a)
|
; check if key is newline (0x0a)
|
||||||
tlr CORE_REG_D @ store in register D because register A is used later on
|
tlr CORE_REG_D ; store in register D because register A is used later on
|
||||||
tlr CORE_REG_A @ store in register A as input for ALU
|
tlr CORE_REG_A ; store in register A as input for ALU
|
||||||
ts "\n" @ store newline in TMP
|
ts "\n" ; store newline in TMP
|
||||||
tlr CORE_REG_B @ store newline in register B as input for ALU
|
tlr CORE_REG_B ; store newline in register B as input for ALU
|
||||||
ts CORE_ALU_EQ @ ALU equal operation
|
ts CORE_ALU_EQ ; ALU equal operation
|
||||||
alu @ run ALU
|
alu ; run ALU
|
||||||
|
|
||||||
@ go back to loop start if pressed key is newline
|
; go back to loop start if pressed key is newline
|
||||||
tlr CORE_REG_A @ store result of ALU operation in TMP
|
tlr CORE_REG_A ; store result of ALU operation in TMP
|
||||||
@ ts loop @ load memory address of loop start into TMP
|
; ts loop ; load memory address of loop start into TMP
|
||||||
ts 0
|
ts 0
|
||||||
tls
|
tls
|
||||||
ts jump_switch
|
ts jump_switch
|
||||||
tls
|
tls
|
||||||
ts end_input
|
ts end_input
|
||||||
tlrc CORE_REG_PC @ set register PC to loop start address if result is true
|
tlrc CORE_REG_PC ; set register PC to loop start address if result is true
|
||||||
pop
|
pop
|
||||||
|
|
||||||
tlr CORE_REG_A
|
tlr CORE_REG_A
|
||||||
ts 0
|
ts 0
|
||||||
tlrc CORE_REG_C
|
tlrc CORE_REG_C
|
||||||
|
|
||||||
@ print out char
|
; print out char
|
||||||
tsr CORE_REG_D @ get char
|
tsr CORE_REG_D ; get char
|
||||||
tlr CORE_REG_A @ load char into register A
|
tlr CORE_REG_A ; load char into register A
|
||||||
ts CORE_MEM_CHR @ set TMP to char print memory address
|
ts CORE_MEM_CHR ; set TMP to char print memory address
|
||||||
set @ print char
|
set ; print char
|
||||||
|
|
||||||
@ increment counter by one
|
; increment counter by one
|
||||||
tsr CORE_REG_C
|
tsr CORE_REG_C
|
||||||
tlr CORE_REG_A
|
tlr CORE_REG_A
|
||||||
ts 1
|
ts 1
|
||||||
|
@ -120,27 +120,10 @@ main:
|
||||||
|
|
||||||
ts "\n"
|
ts "\n"
|
||||||
tlr CORE_REG_A
|
tlr CORE_REG_A
|
||||||
ts CORE_MEM_CHR
|
|
||||||
set
|
|
||||||
|
|
||||||
tsr CORE_REG_C
|
; set PC to maximum for u16 and therefore stops program execution
|
||||||
tls
|
ts 0xffff ; load 0xffff into TMP
|
||||||
dbg
|
tlr CORE_REG_PC ; store value of TMP into register PC
|
||||||
pop
|
|
||||||
|
|
||||||
ts 0
|
|
||||||
tlr CORE_REG_C
|
|
||||||
ts loop
|
|
||||||
tlr CORE_REG_PC
|
|
||||||
|
|
||||||
@ .std_stop
|
|
||||||
|
|
||||||
@ set PC to maximum for u16 and therefore stops program execution
|
|
||||||
ts 0xffff @ load 0xffff into TMP
|
|
||||||
tlr CORE_REG_PC @ store value of TMP into register PC
|
|
||||||
|
|
||||||
jump_switch:
|
|
||||||
dbg
|
|
||||||
|
|
||||||
.org jump_main
|
.org jump_main
|
||||||
ts main
|
ts main
|
||||||
|
|
147
examples/forth_old.asm
Normal file
147
examples/forth_old.asm
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
@ hence core lib
|
||||||
|
core:
|
||||||
|
core_mem:
|
||||||
|
.define CORE_MEM_PRG, (0 * 1024)
|
||||||
|
.define CORE_MEM_ST, (32 * 1024)
|
||||||
|
.define CORE_MEM_MEM, (40 * 1024)
|
||||||
|
.define CORE_MEM_OUT, (56 * 1024)
|
||||||
|
.define CORE_MEM_CHR, (56 * 1024 + 1)
|
||||||
|
.define CORE_MEM_KEY, (56 * 1024 + 2)
|
||||||
|
|
||||||
|
core_reg:
|
||||||
|
.define CORE_REG_PC, 0x0
|
||||||
|
.define CORE_REG_OPC, 0x1
|
||||||
|
.define CORE_REG_ARG, 0x2
|
||||||
|
.define CORE_REG_S, 0x3
|
||||||
|
.define CORE_REG_SP, 0x4
|
||||||
|
.define CORE_REG_A, 0x5
|
||||||
|
.define CORE_REG_B, 0x6
|
||||||
|
.define CORE_REG_C, 0x7
|
||||||
|
.define CORE_REG_D, 0x8
|
||||||
|
|
||||||
|
core_alu:
|
||||||
|
.define CORE_ALU_NOT, 0x00
|
||||||
|
.define CORE_ALU_AND, 0x01
|
||||||
|
.define CORE_ALU_OR, 0x02
|
||||||
|
.define CORE_ALU_XOR, 0x03
|
||||||
|
.define CORE_ALU_LSH, 0x04
|
||||||
|
.define CORE_ALU_RSH, 0x05
|
||||||
|
.define CORE_ALU_ADD, 0x06
|
||||||
|
.define CORE_ALU_SUB, 0x07
|
||||||
|
.define CORE_ALU_MUL, 0x08
|
||||||
|
.define CORE_ALU_DIV, 0x09
|
||||||
|
.define CORE_ALU_CMP, 0x0a
|
||||||
|
.define CORE_ALU_EQ, 0x0b
|
||||||
|
.define CORE_ALU_LT, 0x0c
|
||||||
|
.define CORE_ALU_GT, 0x0d
|
||||||
|
.define CORE_ALU_LEQ, 0x0e
|
||||||
|
.define CORE_ALU_GEQ, 0x0f
|
||||||
|
.define CORE_ALU_BOL, 0x10
|
||||||
|
.define CORE_ALU_INV, 0x11
|
||||||
|
.define CORE_ALU_RND, 0x12
|
||||||
|
|
||||||
|
@ hence standard lib
|
||||||
|
STD:
|
||||||
|
.define STD_U8_MAX, 0xff
|
||||||
|
.define STD_U16_MAX, 0xffff
|
||||||
|
|
||||||
|
.macro std_stop
|
||||||
|
ts 0xffff
|
||||||
|
tlr CORE_REG_PC
|
||||||
|
.macroend
|
||||||
|
|
||||||
|
forth:
|
||||||
|
.define FORTH_MEM_INPUT_SIZE, 16
|
||||||
|
.define FORTH_MEM_INPUT_DYN_SIZE, CORE_MEM_MEM
|
||||||
|
.define FORTH_MEM_INPUT_START, (FORTH_MEM_INPUT_DYN_SIZE + 1)
|
||||||
|
.define FORTH_MEM_INPUT_END, (FORTH_MEM_INPUT_START + FORTH_MEM_INPUT_SIZE)
|
||||||
|
|
||||||
|
.define jump_main, (CORE_MEM_ST - 3 - 1)
|
||||||
|
|
||||||
|
ts jump_main
|
||||||
|
tlr CORE_REG_PC
|
||||||
|
|
||||||
|
end_input:
|
||||||
|
dbg
|
||||||
|
|
||||||
|
main:
|
||||||
|
@ loop body
|
||||||
|
loop:
|
||||||
|
@ read key from stdin
|
||||||
|
ts CORE_MEM_KEY
|
||||||
|
get
|
||||||
|
|
||||||
|
@ check if key is newline (0x0a)
|
||||||
|
tlr CORE_REG_D @ store in register D because register A is used later on
|
||||||
|
tlr CORE_REG_A @ store in register A as input for ALU
|
||||||
|
ts "\n" @ store newline in TMP
|
||||||
|
tlr CORE_REG_B @ store newline in register B as input for ALU
|
||||||
|
ts CORE_ALU_EQ @ ALU equal operation
|
||||||
|
alu @ run ALU
|
||||||
|
|
||||||
|
@ go back to loop start if pressed key is newline
|
||||||
|
tlr CORE_REG_A @ store result of ALU operation in TMP
|
||||||
|
@ ts loop @ load memory address of loop start into TMP
|
||||||
|
ts 0
|
||||||
|
tls
|
||||||
|
ts jump_switch
|
||||||
|
tls
|
||||||
|
ts end_input
|
||||||
|
tlrc CORE_REG_PC @ set register PC to loop start address if result is true
|
||||||
|
pop
|
||||||
|
|
||||||
|
tlr CORE_REG_A
|
||||||
|
ts 0
|
||||||
|
tlrc CORE_REG_C
|
||||||
|
|
||||||
|
@ print out char
|
||||||
|
tsr CORE_REG_D @ get char
|
||||||
|
tlr CORE_REG_A @ load char into register A
|
||||||
|
ts CORE_MEM_CHR @ set TMP to char print memory address
|
||||||
|
set @ print char
|
||||||
|
|
||||||
|
@ increment counter by one
|
||||||
|
tsr CORE_REG_C
|
||||||
|
tlr CORE_REG_A
|
||||||
|
ts 1
|
||||||
|
tlr CORE_REG_B
|
||||||
|
ts CORE_ALU_ADD
|
||||||
|
alu
|
||||||
|
tlr CORE_REG_C
|
||||||
|
tlr CORE_REG_A
|
||||||
|
|
||||||
|
ts FORTH_MEM_INPUT_SIZE
|
||||||
|
tlr CORE_REG_B
|
||||||
|
ts CORE_ALU_LT
|
||||||
|
alu
|
||||||
|
tlr CORE_REG_A
|
||||||
|
ts loop
|
||||||
|
tlrc CORE_REG_PC
|
||||||
|
|
||||||
|
ts "\n"
|
||||||
|
tlr CORE_REG_A
|
||||||
|
ts CORE_MEM_CHR
|
||||||
|
set
|
||||||
|
|
||||||
|
tsr CORE_REG_C
|
||||||
|
tls
|
||||||
|
dbg
|
||||||
|
pop
|
||||||
|
|
||||||
|
ts 0
|
||||||
|
tlr CORE_REG_C
|
||||||
|
ts loop
|
||||||
|
tlr CORE_REG_PC
|
||||||
|
|
||||||
|
@ .std_stop
|
||||||
|
|
||||||
|
@ set PC to maximum for u16 and therefore stops program execution
|
||||||
|
ts 0xffff @ load 0xffff into TMP
|
||||||
|
tlr CORE_REG_PC @ store value of TMP into register PC
|
||||||
|
|
||||||
|
jump_switch:
|
||||||
|
dbg
|
||||||
|
|
||||||
|
.org jump_main
|
||||||
|
ts main
|
||||||
|
tlr CORE_REG_PC
|
Loading…
Reference in a new issue