2017-01-08 03:35:35 +00:00
|
|
|
;-------------------------------
|
|
|
|
; CopyMemory
|
|
|
|
; in: A = source address (high)
|
|
|
|
; X = destination address (high)
|
|
|
|
; Y = number of pages to copy
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
2017-01-24 00:57:43 +00:00
|
|
|
!zone {
|
2017-01-08 03:35:35 +00:00
|
|
|
CopyMemory
|
2017-01-24 00:57:43 +00:00
|
|
|
sta .source+2
|
|
|
|
stx .dest+2
|
2017-01-08 03:35:35 +00:00
|
|
|
ldx #$00
|
2017-01-24 00:57:43 +00:00
|
|
|
.source lda $FF00,x
|
|
|
|
.dest sta $FF00,x
|
2017-01-08 03:35:35 +00:00
|
|
|
inx
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .source
|
|
|
|
inc .source+2
|
|
|
|
inc .dest+2
|
2017-01-08 03:35:35 +00:00
|
|
|
dey
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .source
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
2017-01-24 00:57:43 +00:00
|
|
|
}
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; ClearMemory
|
|
|
|
; in: A = source address (high)
|
|
|
|
; X = value to set
|
|
|
|
; Y = number of pages
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
2017-01-24 00:57:43 +00:00
|
|
|
!zone {
|
2017-01-08 03:35:35 +00:00
|
|
|
ClearMemory
|
2017-01-24 00:57:43 +00:00
|
|
|
sta .dest+2
|
2017-01-08 03:35:35 +00:00
|
|
|
txa
|
|
|
|
ldx #$00
|
2017-01-24 00:57:43 +00:00
|
|
|
.dest sta $FF00,x
|
2017-01-08 03:35:35 +00:00
|
|
|
inx
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .dest
|
|
|
|
inc .dest+2
|
2017-01-08 03:35:35 +00:00
|
|
|
dey
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .dest
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
2017-01-24 00:57:43 +00:00
|
|
|
}
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; ClearTSBuffer
|
|
|
|
; clear the $1000 byte memory buffer
|
|
|
|
; used to store the current track's data
|
|
|
|
; in: none
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
|
|
|
ClearTSBuffer
|
|
|
|
lda #BASEPAGE
|
|
|
|
ldx #$00
|
|
|
|
ldy #$10
|
|
|
|
jmp ClearMemory
|
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; SwapMemory
|
|
|
|
; in: A = source address (high)
|
|
|
|
; X = destination address (high)
|
|
|
|
; Y = number of pages to copy
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
2017-01-24 00:57:43 +00:00
|
|
|
!zone {
|
2017-01-08 03:35:35 +00:00
|
|
|
SwapMemory
|
2017-01-24 00:57:43 +00:00
|
|
|
sta .source1+2
|
|
|
|
sta .source2+2
|
|
|
|
stx .dest1+2
|
|
|
|
stx .dest2+2
|
2017-01-08 03:35:35 +00:00
|
|
|
ldx #$00
|
2017-01-24 00:57:43 +00:00
|
|
|
.source1 lda $FF00,x
|
2017-01-08 03:35:35 +00:00
|
|
|
pha
|
2017-01-24 00:57:43 +00:00
|
|
|
.dest1 lda $FF00,x
|
|
|
|
.source2 sta $FF00,x
|
2017-01-08 03:35:35 +00:00
|
|
|
pla
|
2017-01-24 00:57:43 +00:00
|
|
|
.dest2 sta $FF00,x
|
2017-01-08 03:35:35 +00:00
|
|
|
inx
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .source1
|
|
|
|
inc .source1+2
|
|
|
|
inc .source2+2
|
|
|
|
inc .dest1+2
|
|
|
|
inc .dest2+2
|
2017-01-08 03:35:35 +00:00
|
|
|
dey
|
2017-01-24 00:57:43 +00:00
|
|
|
bne .source1
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
2017-01-24 00:57:43 +00:00
|
|
|
}
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; SaveProDOS
|
|
|
|
; saves memory pages used by ProDOS
|
|
|
|
; pages $00, $03, $BF
|
|
|
|
; in: none
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
2017-01-24 00:57:43 +00:00
|
|
|
!zone {
|
2017-01-08 03:35:35 +00:00
|
|
|
SaveProDOS
|
|
|
|
lda #$00
|
|
|
|
ldx #$40
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$03
|
|
|
|
ldx #$41
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
|
|
|
lda #$BF
|
|
|
|
ldx #$42
|
|
|
|
ldy #$01
|
|
|
|
jsr CopyMemory
|
2017-01-24 00:57:43 +00:00
|
|
|
.exit
|
2017-01-08 03:35:35 +00:00
|
|
|
rts
|
2017-01-24 00:57:43 +00:00
|
|
|
}
|
2017-01-08 03:35:35 +00:00
|
|
|
|
|
|
|
;-------------------------------
|
|
|
|
; SwapProDOS
|
|
|
|
; saves/restores memory pages used by ProDOS
|
|
|
|
; pages $00, $03, $BF
|
|
|
|
; in: none
|
|
|
|
; out: all flags and registers clobbered
|
|
|
|
;-------------------------------
|
|
|
|
SwapProDOS
|
|
|
|
lda #$00
|
|
|
|
ldx #$40
|
|
|
|
ldy #$01
|
|
|
|
jsr SwapMemory
|
|
|
|
lda #$03
|
|
|
|
ldx #$41
|
|
|
|
ldy #$01
|
|
|
|
jsr SwapMemory
|
|
|
|
lda #$BF
|
|
|
|
ldx #$42
|
|
|
|
ldy #$01
|
|
|
|
jsr SwapMemory
|
|
|
|
rts
|