aboutsummaryrefslogtreecommitdiffstats
path: root/asm/bootstrap.atk16
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-11-03 01:01:14 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2023-11-03 01:01:14 +0200
commit02cbabcd735e6367b87fa4401f7a5df89813a6f7 (patch)
tree6249379470d459532b692f80f0fa7fd9173e9659 /asm/bootstrap.atk16
parent721b0f823ca1ef90feb7fb2b3b9e8174c5e8cf68 (diff)
Add graphics mode selector
Diffstat (limited to 'asm/bootstrap.atk16')
-rw-r--r--asm/bootstrap.atk1669
1 files changed, 46 insertions, 23 deletions
diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16
index 813ebb5..2aa5d88 100644
--- a/asm/bootstrap.atk16
+++ b/asm/bootstrap.atk16
@@ -1,42 +1,65 @@
-@let stack_segment 0x8000
-@let vector_table 0x10
-@let mmio_segment 0xE000
-@let terminal_addr 0xE000
-@let keyboard_addr 0xE001
-@let sprite_mem 0xE800
+; vector table fields
+@let vector_table 0x10
+@let vt_ISRO 0x10 ; ISR0
+@let vt_ISR1 0x11 ; ISR1
+@let vt_ISR2 0x12 ; ISR2
+@let vt_ISR3 0x13 ; ISR3
+@let vt_stack_addr 0x14 ; Stack address
+@let vt_term_pp_addr 0x15 ; Terminal peripheral address
+@let vt_kb_pp_addr 0x16 ; Keyboard peripheral address
+@let vt_gr_mode_addr 0x17 ; Graphics mode setting address
+
+; memory segments
+@let stack_segment 0x8000
+@let mmio_segment 0xE000
+@let terminal_addr 0xE000
+@let keyboard_addr 0xE001
+@let gr_mode_addr 0xE002
+@let sprite_mem 0xE800
+
+; graphics mode settings
+@let gr_disabled_mode 0b00
+@let gr_text_mode 0b01
+@let gr_sprite_mode 0b10
@address vector_table
- keyboard_isr ; 0x10 ISR0
- hlt_isr ; 0x11 ISR1
- hlt_isr ; 0x12 ISR2
- hlt_isr ; 0x13 ISR3
- stack_segment ; 0x14 Stack address
- 0x0 ; 0x15 <unused>
- terminal_addr ; 0x16 Terminal peripheral address
- keyboard_addr ; 0x17 Keyboard peripheral address
+ keyboard_isr ; 0x10
+ hlt_isr ; 0x11
+ hlt_isr ; 0x12
+ hlt_isr ; 0x13
+ stack_segment ; 0x14
+ terminal_addr ; 0x15
+ keyboard_addr ; 0x16
+ gr_mode_addr ; 0x17
@label hlt_isr
ldi 0x55 RE
hlt
@label keyboard_isr
- spu RA ; use RA, RB
+ spu RA ; use RA, RB
spu RB
- ldi 0x17 RA ; RA := 0x17 Keyboard peripheral address pointer
- ldr RA RA ; RA := 0xE001 Keyboard peripheral address deref
- ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register
- ldi 0x16 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
+ ldi vt_kb_pp_addr RA ; RA := 0x17 Keyboard peripheral address pointer
+ ldr RA RA ; RA := 0xE001 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
rti
@label program_segment
@address 0x0
; set up stack pointer to point to beginning of stack segment
- ldi 0x14 RA
+ ldi vt_stack_addr RA
ldr RA RF
+; set graphics mode to disabled
+ ldi vt_gr_mode_addr RA
+ ldr RA RA
+ ldi gr_disabled_mode RB
+ str RB RA
+; jump to main (user defined)
jpi main
@address program_segment