diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 10:55:00 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 10:55:32 +0200 |
| commit | 7acb987b0796ab0e93b5422de9b88a4eb7755443 (patch) | |
| tree | d8de36197d26b32b7f9378ed32cbe66b5ae47fb9 /asm | |
| parent | 02cbabcd735e6367b87fa4401f7a5df89813a6f7 (diff) | |
Start working on reading custom charset
Diffstat (limited to 'asm')
| -rw-r--r-- | asm/bootstrap.atk16 | 33 | ||||
| -rw-r--r-- | asm/ext_std.py | 28 | ||||
| -rw-r--r-- | asm/text_mode.atk16 | 8 |
3 files changed, 47 insertions, 22 deletions
diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16 index 2aa5d88..31b61f2 100644 --- a/asm/bootstrap.atk16 +++ b/asm/bootstrap.atk16 @@ -1,6 +1,6 @@ ; vector table fields @let vector_table 0x10 -@let vt_ISRO 0x10 ; ISR0 +@let vt_ISR0 0x10 ; ISR0 @let vt_ISR1 0x11 ; ISR1 @let vt_ISR2 0x12 ; ISR2 @let vt_ISR3 0x13 ; ISR3 @@ -10,6 +10,7 @@ @let vt_gr_mode_addr 0x17 ; Graphics mode setting address ; memory segments +@let charmem_segment 0x0100 @let stack_segment 0x8000 @let mmio_segment 0xE000 @let terminal_addr 0xE000 @@ -37,30 +38,28 @@ hlt @label keyboard_isr - spu RA ; use RA, RB - spu RB - ldi vt_kb_pp_addr RA ; RA := 0x17 Keyboard peripheral address pointer - ldr RA RA ; RA := 0xE001 Keyboard peripheral address deref + stack_stash RA RB + ldi vt_kb_pp_addr RA ; RA := Keyboard peripheral address pointer + ldr RA RA ; RA := Keyboard peripheral address deref ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register - ldi vt_term_pp_addr RB ; RB := 0x16 Terminal peripheral address pointer - ldr RB RB ; RB := 0xE000 Terminal peripheral address deref - str RA RB ; terminal <- character code - spo RB ; restore RA, RB - spo RA + ldi vt_term_pp_addr RB ; RB := Terminal peripheral address pointer + ldr RB RB ; RB := Terminal peripheral address deref + str RA RB ; terminal <- character code (ASCII?) + mov RA RE ; RE := character code (for debugging) + stack_restore RA RB rti @label program_segment +; define short prelude that sets up vital instructions +; NOTE: must be shorter than the vector table offset @address 0x0 ; set up stack pointer to point to beginning of stack segment ldi vt_stack_addr RA ldr RA RF + jpi program_segment + +@address program_segment ; set graphics mode to disabled - ldi vt_gr_mode_addr RA - ldr RA RA - ldi gr_disabled_mode RB - str RB RA + set_graphics_mode gr_disabled_mode ; jump to main (user defined) jpi main - -@address program_segment -; set up address for program code diff --git a/asm/ext_std.py b/asm/ext_std.py index de7cd43..3d87372 100644 --- a/asm/ext_std.py +++ b/asm/ext_std.py @@ -72,9 +72,34 @@ def expand_csi(addr_imm: str): *expand_spu("__CSR_SCRATCH"), ["jpi", addr_imm] ] + def expand_rsr(): return expand_spo("__CSR_SCRATCH") + [["jpr", "__CSR_SCRATCH"]] + +def stack_stash(*rs: str): + result: ExpandResult = [] + for r in rs: + result += expand_spu(r) + + return result + +def stack_restore(*rs: str): + result: ExpandResult = [] + for r in rs: + prefix = expand_spu(r) + result = prefix + result + + return result + +def set_graphics_mode(mode: str): + return [ + ["ldi", "vt_gr_mode_addr", "RA"], + ["ldr", "RA", "RA"], + ["ldi", mode, "RB"], + ["str", "RB", "RA"], + ] + expansions: OpExpansionDict = { "add": expand_add, "sub": expand_sub, @@ -98,4 +123,7 @@ expansions: OpExpansionDict = { "csr": expand_csr, "csi": expand_csi, "rsr": expand_rsr, + "stack_stash": stack_stash, + "stack_restore": stack_restore, + "set_graphics_mode": set_graphics_mode, } diff --git a/asm/text_mode.atk16 b/asm/text_mode.atk16 index 05b4fd3..f7bc40f 100644 --- a/asm/text_mode.atk16 +++ b/asm/text_mode.atk16 @@ -7,11 +7,9 @@ @include bootstrap @label main - ; set graphics mode to gr_text_mode - ldi vt_gr_mode_addr RA - ldr RA RA - ldi gr_text_mode RB - str RB RA + ; set graphics mode to sprite mode + set_graphics_mode gr_sprite_mode + ; set_graphics_mode gr_text_mode @label loop jpi loop |
