mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-26 10:49:17 +00:00
99 lines
2.1 KiB
Plaintext
99 lines
2.1 KiB
Plaintext
processor 6502
|
|
include "vcs.h"
|
|
include "macro.h"
|
|
include "xmacro.h"
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
seg.u Variables
|
|
org $80
|
|
|
|
Temp .byte
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
; Macro that implements Bank Switching trampoline
|
|
; X = bank number
|
|
; A = hi byte of destination PC
|
|
; Y = lo byte of destination PC
|
|
MAC BANK_SWITCH_TRAMPOLINE
|
|
pha ; push hi byte
|
|
tya ; Y -> A
|
|
pha ; push lo byte
|
|
lda $1FF8,x ; do the bank switch
|
|
rts ; return to target
|
|
ENDM
|
|
|
|
; Macro that performs bank switch
|
|
MAC BANK_SWITCH
|
|
.Bank SET {1}
|
|
.Addr SET {2}
|
|
lda #>(.Addr-1)
|
|
ldy #<(.Addr-1)
|
|
ldx #.Bank
|
|
jmp BankSwitch
|
|
ENDM
|
|
|
|
seg Code
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;; BANK 0
|
|
|
|
org $1000
|
|
rorg $F000
|
|
;----The following code is the same on both banks----
|
|
Start
|
|
; Ensure that bank 0 is selected
|
|
lda #>(Reset_0-1)
|
|
ldy #<(Reset_0-1)
|
|
ldx #0
|
|
BankSwitch
|
|
BANK_SWITCH_TRAMPOLINE
|
|
;----End of bank-identical code----
|
|
Reset_0
|
|
CLEAN_START
|
|
lda #$30
|
|
sta COLUBK ; make the screen red
|
|
bit INPT4 ; test button
|
|
bmi Reset_0 ; button not pressed, repeat
|
|
; Switch to Bank 2 routine
|
|
lda #>(Main_1-1)
|
|
ldy #<(Main_1-1)
|
|
ldx #1
|
|
jmp BankSwitch
|
|
|
|
; Bank 0 epilogue
|
|
org $1FFA
|
|
rorg $FFFA
|
|
.word Start ; NMI
|
|
.word Start ; RESET
|
|
.word Start ; BRK
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;; BANK 1
|
|
|
|
org $2000
|
|
rorg $F000
|
|
;----The following code is the same on both banks----
|
|
Start
|
|
; Ensure that bank 0 is selected
|
|
lda #>(Reset_0-1)
|
|
ldy #<(Reset_0-1)
|
|
ldx #0
|
|
BankSwitch
|
|
BANK_SWITCH_TRAMPOLINE
|
|
;----End of bank-identical code----
|
|
Main_1
|
|
inc Temp
|
|
lda Temp
|
|
sta COLUBK ; make rainbows
|
|
bit INPT4 ; test button
|
|
bpl Main_1 ; button is pressed, repeat
|
|
BANK_SWITCH 0,Reset_0
|
|
|
|
; Bank 1 epilogue
|
|
org $2FFA
|
|
rorg $FFFA
|
|
.word Start ; NMI
|
|
.word Start ; RESET
|
|
.word Start ; BRK
|