home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Transactor
/
Transactor_20_1987_Transactor_Publishing.d64
/
1581.bud
< prev
next >
Wrap
Text File
|
2023-02-26
|
2KB
|
87 lines
; 1581 display t&s burst mode source code
;
; <c> m. garamszeghy 1987
;
;
pntr = $fa ; zero page pointer
size = $fc ; number of blocks to read
mmu = $ff00 ; mmu config reg
data = $1300 ; start of data buffer
conf = $0d00 ; start of disk type buffer
clock = $dd00 ; burst clock line
c1dr = $dc0c ; burst data register
c1icr = $dc0d ; burst interrupt register
;
;
*= $0b00 ; decimal 2816
.opt oo ; assemble to memory
;
jmptable =*
jmp testdsk ; analyze disk
jmp readdata ; burst memory read
;
setbnk =* ; set to bank 15
lda #0
sta mmu
rts
;
toggle =* ; toggle data line
lda #8
tog1 bit c1icr
beq tog1 ; wait for icr
lda clock
eor #$10 ; toggle clock
sta clock
lda c1dr ; get a data byte
rts
;
reset =* ; init burst mode
sei
bit c1icr
lda clock
eor #$10 ; toggle clock
sta clock
rts
;
testdsk =* ; burst mode query disk format
sta pntr ; save offset into format buffer
jsr setbnk ; go to bank 15
lda #>conf ; high byte of format buffer
sta pntr+1
jsr reset ; start burst mode
ldy #0
tes1 jsr toggle ; get first status byte
sta (pntr),y ; and stash it
and #$0e ; check for errors
bne exittest
iny
cpy #2
bne tes1 ; get next status byte
tes2 jsr toggle ; get data byte
sta (pntr),y ; and save it
iny
cpy #7 ; check for all done
bne tes2
exittest =* ; exit disk test routine
cli ; restore interrupts
rts
;
readdata =* ; burst mode memory read
sta size ; number of pages to read
lda #<data
sta pntr ; set pointer to data buffer
lda #>data
sta pntr
jsr setbnk ; set bank to 15
jsr reset ; start burst mode
ldy #0
rea1 jsr toggle ; get data byte
sta (pntr),y ; and save it
iny
bne rea1 ; end of page?
dec size
beq exittest ; last page?
inc pntr+1
jmp rea1 ; go get next page
;