diff options
| -rw-r--r-- | asm/bootstrap.atk16 | 33 | ||||
| -rw-r--r-- | asm/ext_std.py | 28 | ||||
| -rw-r--r-- | asm/text_mode.atk16 | 8 | ||||
| -rw-r--r-- | digital/atk16_mem.dig | 6 | ||||
| -rw-r--r-- | src/charset.py | 14 | ||||
| -rw-r--r-- | src/charset.txt | 208 |
6 files changed, 272 insertions, 25 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 diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig index 4c1db35..1fa106b 100644 --- a/digital/atk16_mem.dig +++ b/digital/atk16_mem.dig @@ -35,9 +35,9 @@ </entry> <entry> <string>Data</string> - <data>4014,2a00,4017,2000,4200,3008,6022,9*8000,1a,18,18,18,8000,e000 -,e001,e002,4855,f000,3140,1b48,3148,1b48,4016,2000,2000,4215,2240 -,3040,1b49,2340,1b49,2140,e000,4017,2000,4201,3008,61ff</data> + <data>4014,2a00,6027,13*8000,1a,18,18,18,8000,e000,e001,e002,4855,f000 +,3140,1b48,3148,1b48,4016,2000,2000,4215,2240,3040,1800,3148,1b48 +,3140,1b48,e000,4017,2000,4200,3008,6000,4017,2000,4202,3008,61ff</data> </entry> </elementAttributes> <pos x="740" y="100"/> diff --git a/src/charset.py b/src/charset.py new file mode 100644 index 0000000..628a983 --- /dev/null +++ b/src/charset.py @@ -0,0 +1,14 @@ +def gen_charset(file = "charset.txt"): + with open(file, "r") as f: + lines = [s.strip("\n") for s in f.readlines()] + + result: list[list[str]] = [] + i = 0 + while i < len(lines): + char = lines[i:i+8] + result.append(char) + i += 8 + + print(result) + +gen_charset() diff --git a/src/charset.txt b/src/charset.txt new file mode 100644 index 0000000..0b68a45 --- /dev/null +++ b/src/charset.txt @@ -0,0 +1,208 @@ +% ABCDEFGHIJKLMNOPQRSTUVWXYZ + + + + + + + + ## +# # +# # +#### +# # +# # +# # + +## +# # +# # +### +# # +# # +#### + + ## +# # +# +# +# +# # + ## + +#### +# +# +## +# +# +#### + +#### +# +# +## +# +# +# + + ## +# # +# +# +# ## +# # + ## + +# # +# # +#### +# # +# # +# # +# # + +### + # + # + # + # + # +### + + ### + # + # + # + # +# # + ## + +# # +# # +## +# # +# # +# # +# # + +# +# +# +# +# +# +#### + +# # +#### +#### +# # +# # +# # +# # + +# # +## # +## # +# ## +# ## +# # +# # + + ## +# # +# # +# # +# # +# # + ## + +### +# # +# # +### +# +# +# + + ## +# # +# # +# # +# ## + ### + # + +### +# # +# # +### +## +# # +# # + + ## +# # +# + ## + # +# # + ## + +### + # + # + # + # + # + # + +# # +# # +# # +# # +# # +# # + ### + +# # +# # +# # +# # +# # +# # + ## + +# # +# # +# # +# # +#### +#### +# # + +# # +# # + ## +# # +# # +# # +# # + +# # +# # +# # + ### + # +# # + ### + +#### + # + # + # + # +# +#### +
\ No newline at end of file |
