diff options
Diffstat (limited to 'asm')
| -rw-r--r-- | asm/bootstrap.atk16 | 69 | ||||
| -rw-r--r-- | asm/text_mode.atk16 | 17 |
2 files changed, 63 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 diff --git a/asm/text_mode.atk16 b/asm/text_mode.atk16 new file mode 100644 index 0000000..05b4fd3 --- /dev/null +++ b/asm/text_mode.atk16 @@ -0,0 +1,17 @@ +@opt stack_pointer RF +@opt csr_scratch RH +@use ext_std:* + +; bootstrap code (must be called to setup mandatory data) +; will jump to label main +@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 + +@label loop + jpi loop |
