aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-11-03 10:55:00 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2023-11-03 10:55:32 +0200
commit7acb987b0796ab0e93b5422de9b88a4eb7755443 (patch)
treed8de36197d26b32b7f9378ed32cbe66b5ae47fb9
parent02cbabcd735e6367b87fa4401f7a5df89813a6f7 (diff)
Start working on reading custom charset
-rw-r--r--asm/bootstrap.atk1633
-rw-r--r--asm/ext_std.py28
-rw-r--r--asm/text_mode.atk168
-rw-r--r--digital/atk16_mem.dig6
-rw-r--r--src/charset.py14
-rw-r--r--src/charset.txt208
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