implemented BRK handling routine (not yet connected to IRQ)
This commit is contained in:
1 parent
44ca73be40
commit
03bc8b8e78
17 files changed
+51
-29
No files matched your search
@@ -28,7 +28,7 @@
|
|||||||
.alias VIC_SP7Y $D00F
|
.alias VIC_SP7Y $D00F
|
||||||
|
|
||||||
.alias VIC_MSIGX $D010
|
.alias VIC_MSIGX $D010
|
||||||
.alias VIC_SCROLLY $D011
|
.alias VIC_SCROLY $D011
|
||||||
.alias VIC_RASTER $D012
|
.alias VIC_RASTER $D012
|
||||||
.alias VIC_LPENX $D013
|
.alias VIC_LPENX $D013
|
||||||
.alias VIC_LPENY $D014
|
.alias VIC_LPENY $D014
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
;; BASIC startup vector
|
||||||
|
|
||||||
|
.alias IBASIC_COLD_START $A000
|
||||||
|
.alias IBASIC_WARM_START $A002
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
.macro TARGET_HOOK_BANNER
|
.macro TARGET_HOOK_BANNER
|
||||||
|
|
||||||
.byte $05, " OPEN ROMS, ", $00
|
.byte " OPEN ROMS, ", $00
|
||||||
|
|
||||||
.macend
|
.macend
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
.macro TARGET_HOOK_BANNER
|
.macro TARGET_HOOK_BANNER
|
||||||
|
|
||||||
.byte $05, " OPEN ROMS FOR ULTIMATE 64", $0D, $0D, " ", $00
|
.byte " OPEN ROMS FOR ULTIMATE 64", $0D, $0D, " ", $00
|
||||||
|
|
||||||
.macend
|
.macend
|
||||||
+5
-2
@@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
|
|
||||||
cint:
|
cint:
|
||||||
|
|
||||||
|
cint_brk: ; entry for BRK and STOP+RESTORE - XXX, where should it start?
|
||||||
|
|
||||||
jsr setup_vicii
|
jsr setup_vicii
|
||||||
|
|
||||||
;; Initialise cursor blink flags (Compute's Mapping the 64 p215)
|
;; Initialise cursor blink flags (Compute's Mapping the 64 p215)
|
||||||
@@ -34,8 +37,8 @@ cint:
|
|||||||
stx key_first_repeat_delay
|
stx key_first_repeat_delay
|
||||||
|
|
||||||
;; Set current colour for text (Compute's Mapping the 64 p215)
|
;; Set current colour for text (Compute's Mapping the 64 p215)
|
||||||
ldx #$0e ; light blue by default
|
ldx #$01 ; default is light blue ($0E), but we use a different one
|
||||||
stx $0286
|
stx text_colour
|
||||||
|
|
||||||
;; Set maximum keyboard buffer size (Compute's Mapping the 64 p215)
|
;; Set maximum keyboard buffer size (Compute's Mapping the 64 p215)
|
||||||
ldx #10
|
ldx #10
|
||||||
|
|||||||
@@ -1,21 +1,20 @@
|
|||||||
;; Clear screen and initialise line link table
|
;; Clear screen and initialise line link table
|
||||||
;; (Compute's Mapping the 64 p215-216)
|
;; (Compute's Mapping the 64 p215-216)
|
||||||
|
|
||||||
clear_screen:
|
clear_screen:
|
||||||
|
|
||||||
;; Clear line link table
|
;; Clear line link table
|
||||||
;; (Compute's Mapping the 64 p215)
|
;; (Compute's Mapping the 64 p215)
|
||||||
|
|
||||||
lda #$00
|
lda #$00
|
||||||
ldy #24
|
ldy #24
|
||||||
clearscreen_l1:
|
clearscreen_l1:
|
||||||
sta screen_line_link_table,y
|
sta screen_line_link_table,y
|
||||||
dey
|
dey
|
||||||
bpl clearscreen_l1
|
bpl clearscreen_l1
|
||||||
|
|
||||||
;; Y now = #$FF
|
;; Y now = #$FF
|
||||||
|
|
||||||
|
|
||||||
;; Clear screen RAM.
|
;; Clear screen RAM.
|
||||||
;; We should do this at HIBASE, which annoyingly
|
;; We should do this at HIBASE, which annoyingly
|
||||||
;; is no ZP, so we need to make a vector
|
;; is no ZP, so we need to make a vector
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
|
|
||||||
setup_vicii:
|
setup_vicii:
|
||||||
|
|
||||||
;; Set up default IO values (Compute's Mapping the 64 p215)
|
;; Set up default IO values (Compute's Mapping the 64 p215)
|
||||||
lda #$1b ; Enable text mode
|
lda #$1B ; Enable text mode
|
||||||
sta $d011
|
sta VIC_SCROLY
|
||||||
lda #$c8 ; 40 column etc
|
lda #$C8 ; 40 column etc
|
||||||
sta $d016
|
sta VIC_SCROLX
|
||||||
|
|
||||||
;; Compute's Mapping the 64, p156
|
;; Compute's Mapping the 64, p156
|
||||||
;; We use a different colour scheme of white text on all blue
|
;; We use a different colour scheme of white text on all blue
|
||||||
lda #$06
|
lda #$06
|
||||||
sta $D020
|
sta VIC_EXTCOL
|
||||||
sta $D021
|
sta VIC_BGCOL0
|
||||||
|
|
||||||
;; Turn off sprites
|
;; Turn off sprites (observed hanging around after running programs and resetting)
|
||||||
;; (observed hanging around after running programs and resetting)
|
|
||||||
lda #$00
|
lda #$00
|
||||||
sta $D015
|
sta VIC_SPENA
|
||||||
|
|
||||||
|
;;FALLTROUGH
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
default_irq_handler:
|
default_irq_handler:
|
||||||
|
|
||||||
jsr blink_cursor
|
jsr blink_cursor
|
||||||
|
|||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,11 @@
|
|||||||
|
|
||||||
default_nmi_handler:
|
default_nmi_handler:
|
||||||
|
|
||||||
;; XXX provide real implementation
|
;; XXX implement according to Compute's Mapping the Commodore 64, page 74
|
||||||
|
|
||||||
|
;; XXX check if the source was RESTORE key, quit if it wasn't (no RS-232 support)
|
||||||
|
;; XXX if cartridge present, enter it through warm start vector
|
||||||
|
;; XXX if stop pressed, go to default_brk_handler
|
||||||
|
|
||||||
inc $D020
|
inc $D020
|
||||||
rti
|
rti
|
||||||
|
|||||||
File renamed without changes.
@@ -1,6 +1,11 @@
|
|||||||
|
|
||||||
default_brk_handler:
|
default_brk_handler:
|
||||||
|
|
||||||
;; XXX implement this!
|
;; Implemented according to Compute's Mapping the Commodore 64, pages 73-74
|
||||||
|
|
||||||
|
jsr JRESTOR
|
||||||
|
jsr JIOINIT
|
||||||
|
jsr CINT_BRK
|
||||||
|
|
||||||
|
jmp (IBASIC_WARM_START)
|
||||||
|
|
||||||
;; Acknowledge CIA interrupt and return
|
|
||||||
jmp clear_cia1_interrupt_flag_and_return_from_interrupt
|
|
||||||
File renamed without changes.
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
irq_handler:
|
irq_handler:
|
||||||
;; The IRQ is a commonly messed with thing on the C64,
|
;; The IRQ is a commonly messed with thing on the C64,
|
||||||
;; so we need to handle entry points that are commonly
|
;; so we need to handle entry points that are commonly
|
||||||
@@ -7,17 +8,18 @@ irq_handler:
|
|||||||
;; $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb
|
;; $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb
|
||||||
;; Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb)
|
;; Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb)
|
||||||
|
|
||||||
;; Save registers
|
;; Save registers, sequence according to Compute's Mapping the Commodore 64, page 73
|
||||||
;; Sequence according to Compute's Mapping the 64 p73
|
|
||||||
pha
|
pha
|
||||||
txa
|
txa
|
||||||
pha
|
pha
|
||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
|
|
||||||
;; Call interrupt routine
|
;; Call interrupt routine (only if initialised)
|
||||||
;; (but only if initialised)
|
|
||||||
lda CINV
|
lda CINV
|
||||||
ora CINV+1
|
ora CINV+1
|
||||||
beq default_irq_handler
|
bne +
|
||||||
jmp (CINV)
|
jmp (CINV)
|
||||||
|
*
|
||||||
|
;; Vector not initialized - call default interrupt routine
|
||||||
|
jmp default_irq_handler
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
nmi_handler:
|
nmi_handler:
|
||||||
|
|
||||||
|
;; XXX provide real implementation
|
||||||
|
|
||||||
jmp (NMINV)
|
jmp (NMINV)
|
||||||
|
|
||||||
Reference in new issue
Block a user