mirror of
https://github.com/michaelcmartin/Ophis.git
synced 2024-10-11 09:23:39 +00:00
61 lines
1017 B
Plaintext
61 lines
1017 B
Plaintext
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Commodore 64 Basic Runtime File
|
|
;;
|
|
;; Include this at the TOP of your C64 program, and it will handle
|
|
;; hiding away the BASIC ROM and data and restoring it at the end.
|
|
;;
|
|
;; You will have a contiguous block of RAM from $0800 to $CF81, and
|
|
;; Zero Page access from $02 to $7F in the segment "zp".
|
|
|
|
.word $0801
|
|
.org $0801
|
|
|
|
; BASIC program that just calls our machine language code
|
|
.scope
|
|
.word _next, 10 ; Next line and current line number
|
|
.byte $9e," 2062",0 ; SYS 2062
|
|
_next: .word 0 ; End of program
|
|
.scend
|
|
|
|
.data zp ; Zero Page memory segment.
|
|
.org $0002
|
|
|
|
.text
|
|
|
|
.scope
|
|
; Cache BASIC zero page at top of available RAM
|
|
ldx #$7E
|
|
* lda $01, x
|
|
sta $CF81, x
|
|
dex
|
|
bne -
|
|
|
|
; Swap out the BASIC ROM for RAM
|
|
lda $01
|
|
and #$fe
|
|
ora #$06
|
|
sta $01
|
|
|
|
; Run the real program
|
|
jsr _main
|
|
|
|
; Restore BASIC ROM
|
|
lda $01
|
|
ora #$07
|
|
sta $01
|
|
|
|
; Restore BASIC zero page
|
|
ldx #$7E
|
|
* lda $CF81, x
|
|
sta $01, x
|
|
dex
|
|
bne -
|
|
|
|
; Back to BASIC
|
|
rts
|
|
|
|
_main:
|
|
; Program follows...
|
|
.scend
|