passport/src/memory.a

135 lines
2.9 KiB
Plaintext
Raw Normal View History

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
;-------------------------------
!zone {
2017-01-08 03:35:35 +00:00
CopyMemory
sta .source+2
stx .dest+2
2017-01-08 03:35:35 +00:00
ldx #$00
.source lda $FF00,x
.dest sta $FF00,x
2017-01-08 03:35:35 +00:00
inx
bne .source
inc .source+2
inc .dest+2
2017-01-08 03:35:35 +00:00
dey
bne .source
2017-01-08 03:35:35 +00:00
rts
}
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
;-------------------------------
!zone {
2017-01-08 03:35:35 +00:00
ClearMemory
sta .dest+2
2017-01-08 03:35:35 +00:00
txa
ldx #$00
.dest sta $FF00,x
2017-01-08 03:35:35 +00:00
inx
bne .dest
inc .dest+2
2017-01-08 03:35:35 +00:00
dey
bne .dest
2017-01-08 03:35:35 +00:00
rts
}
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
;-------------------------------
!zone {
2017-01-08 03:35:35 +00:00
SwapMemory
sta .source1+2
sta .source2+2
stx .dest1+2
stx .dest2+2
2017-01-08 03:35:35 +00:00
ldx #$00
.source1 lda $FF00,x
2017-01-08 03:35:35 +00:00
pha
.dest1 lda $FF00,x
.source2 sta $FF00,x
2017-01-08 03:35:35 +00:00
pla
.dest2 sta $FF00,x
2017-01-08 03:35:35 +00:00
inx
bne .source1
inc .source1+2
inc .source2+2
inc .dest1+2
inc .dest2+2
2017-01-08 03:35:35 +00:00
dey
bne .source1
2017-01-08 03:35:35 +00:00
rts
}
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
;-------------------------------
!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
.exit
2017-01-08 03:35:35 +00:00
rts
}
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