mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-11 15:31:09 +00:00
Kernel 0.93+ ProDOS 2.0.3 src
This commit is contained in:
parent
e353a91fc4
commit
78fbcb711b
Binary file not shown.
@ -3,21 +3,14 @@ NEW
|
||||
* object code = mli_1
|
||||
* global page
|
||||
|
||||
ofsG .EQ $2E00-MLI offset to global org
|
||||
.BS $2E00-*
|
||||
H2E00 jmp mlient1 $2E00-2EFF moved to $BF00
|
||||
jspare .EQ *-ofsG
|
||||
jmp jspare will be changed to point to dispatcher.
|
||||
clockv .EQ *-ofsG P8 clock vector
|
||||
rts changed to jmp ($4C) if clock present.
|
||||
jspare jmp jspare will be changed to point to dispatcher.
|
||||
clockv rts changed to jmp ($4C) if clock present.
|
||||
.DA tclk_in clock routine entry address.
|
||||
p8errv .EQ *-ofsG error reporting hook.
|
||||
jmp syserr1
|
||||
sysdeath .EQ *-ofsG
|
||||
jmp sysdeath1 system failure hook.
|
||||
p8error .EQ *-ofsG P8 error code
|
||||
.DA #0
|
||||
drivertbl1 .EQ *-ofsG device driver table 1
|
||||
p8errv jmp syserr1 error reporting hook.
|
||||
sysdeath jmp sysdeath1 system failure hook.
|
||||
p8error .DA #0
|
||||
drivertbl1 .DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
@ -25,8 +18,7 @@ drivertbl1 .EQ *-ofsG device driver table 1
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
drivertbl2 .EQ *-ofsG device driver table 2
|
||||
drivertbl2 .DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
@ -34,42 +26,32 @@ drivertbl2 .EQ *-ofsG device driver table 2
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
*devnum .EQ *-ofsG most recent accessed device
|
||||
.DA #0
|
||||
numdevs .EQ *-ofsG count (-1) active devices
|
||||
.DA #$ff
|
||||
devlist .EQ *-ofsG active device list
|
||||
.HS 00000000000000 up to 14 units may be active
|
||||
.DA #0 devnum
|
||||
numdevs .DA #$ff count (-1) active devices
|
||||
devlist .HS 00000000000000 up to 14 units may be active
|
||||
.HS 00000000000000
|
||||
.DA #0
|
||||
|
||||
.AS "(C)APPLE "
|
||||
mlient1 .EQ *-ofsG
|
||||
php
|
||||
mlient1 php
|
||||
sei
|
||||
jmp mlicont
|
||||
aftirq .EQ *-ofsG irq returns here.
|
||||
sta RRAMWRAMBNK1 read/write RAM bank 1
|
||||
aftirq sta RRAMWRAMBNK1 read/write RAM bank 1
|
||||
jmp fix45 restore $45 after interrupt in LC
|
||||
oldacc .EQ *-ofsG
|
||||
.DA #0
|
||||
afbank .EQ *-ofsG
|
||||
.HS 00
|
||||
oldacc .DA #0
|
||||
afbank .HS 00
|
||||
|
||||
* memory map of lower 48k. each bit represents 1 page.
|
||||
* protected pages = 1, unprotected = 0
|
||||
|
||||
memmap .EQ *-ofsG P8 memory bitmap
|
||||
.HS C000000000000000
|
||||
memmap .HS C000000000000000
|
||||
.HS 0000000000000000
|
||||
.HS 0000000000000001
|
||||
|
||||
* table of buffer addresses for currently open files.
|
||||
* these can only be changed thru the mli call setbuf.
|
||||
|
||||
buftbl .EQ *-ofsG
|
||||
.HS 0000 file #1
|
||||
buftbl .HS 0000 file #1
|
||||
.HS 0000 file #2
|
||||
.HS 0000 file #3
|
||||
.HS 0000 file #4
|
||||
@ -83,57 +65,35 @@ buftbl .EQ *-ofsG
|
||||
* at the time of the most recent interrupt are stored here along
|
||||
* with the address interrupted.
|
||||
|
||||
inttbl .EQ *-ofsG interrupt table
|
||||
.HS 0000 int #1
|
||||
inttbl .HS 0000 int #1
|
||||
.HS 0000 int #2
|
||||
.HS 0000 int #3
|
||||
.HS 0000 int #4
|
||||
p8areg .EQ *-ofsG A register savearea
|
||||
.DA #0
|
||||
p8xreg .EQ *-ofsG X register savearea
|
||||
.DA #0
|
||||
p8yreg .EQ *-ofsG Y register savearea
|
||||
.DA #0
|
||||
p8sreg .EQ *-ofsG S register savearea
|
||||
.DA #0
|
||||
p8preg .EQ *-ofsG P register savearea
|
||||
.DA #0
|
||||
bankid .EQ *-ofsG bank ID byte (ROM/RAM)
|
||||
.DA #1
|
||||
intadr .EQ *-ofsG interrupt return address
|
||||
.HS 0000
|
||||
p8date .EQ *-ofsG bits 15-9=yr, 8-5=mo, 4-0=day
|
||||
.HS 0000
|
||||
p8time .EQ *-ofsG bits 12-8=hr, 5-0=min, low-hi format
|
||||
.HS 0000
|
||||
flevel .EQ *-ofsG current file level
|
||||
.DA #0
|
||||
bubit .EQ *-ofsG backup bit disable, setfileinfo only
|
||||
.DA #0
|
||||
spare1 .EQ *-ofsG used to save acc
|
||||
.DA #0
|
||||
newpfxptr .EQ *-ofsG appletalk alternate prefix ptr
|
||||
.DA #0
|
||||
*machid .EQ *-ofsG machine ID byte
|
||||
.DA #0
|
||||
rommap .EQ *-ofsG slot ROM bit map
|
||||
.DA #0
|
||||
preflag .EQ *-ofsG prefix active flag
|
||||
.DA #0
|
||||
mliact .EQ *-ofsG MLI active flag
|
||||
.DA #0
|
||||
mliretn .EQ *-ofsG last MLI call return address
|
||||
.DA 0
|
||||
mlix .EQ *-ofsG MLI X register savearea
|
||||
.DA #0
|
||||
mliy .EQ *-ofsG MLI Y register savearea
|
||||
.DA #0
|
||||
p8areg .DA #0 A register savearea
|
||||
p8xreg .DA #0 X register savearea
|
||||
p8yreg .DA #0 Y register savearea
|
||||
p8sreg .DA #0 S register savearea
|
||||
p8preg .DA #0 P register savearea
|
||||
bankid .DA #1 bank ID byte (ROM/RAM)
|
||||
intadr .HS 0000 interrupt return address
|
||||
p8date .HS 0000 bits 15-9=yr, 8-5=mo, 4-0=day
|
||||
p8time .HS 0000 bits 12-8=hr, 5-0=min, low-hi format
|
||||
flevel .DA #0 current file level
|
||||
bubit .DA #0 backup bit disable, setfileinfo only
|
||||
spare1 .DA #0 used to save acc
|
||||
newpfxptr .DA #0 appletalk alternate prefix ptr
|
||||
machidbyte .DA #0 machine ID byte
|
||||
rommap .DA #0 slot ROM bit map
|
||||
preflag .DA #0 prefix active flag
|
||||
mliact .DA #0 MLI active flag
|
||||
mliretn .DA 0 last MLI call return address
|
||||
mlix .DA #0 MLI X register savearea
|
||||
mliy .DA #0 MLI Y register savearea
|
||||
|
||||
* language card bank switching routines which must reside at $BFA0 because
|
||||
* workstation software patches this area
|
||||
|
||||
HBFA0 .EQ *-ofsG
|
||||
GP.HBFA0 eor $E000 test for rom enable
|
||||
HBFA0 eor $E000 test for rom enable
|
||||
beq .1 taken if ram enabled
|
||||
sta RROMBNK2 read ROM
|
||||
bne .2 always
|
||||
@ -144,8 +104,7 @@ GP.HBFA0 eor $E000 test for rom enable
|
||||
.2 pla return code
|
||||
rti re-enable interrupts and return
|
||||
|
||||
mlicont .EQ *-ofsG
|
||||
sec
|
||||
mlicont sec
|
||||
ror mliact notify interrupt routines MLI active.
|
||||
lda $E000 preserve language card/rom orientation
|
||||
sta bnkbyt1 for proper restoration when mli exits.
|
||||
@ -155,11 +114,9 @@ mlicont .EQ *-ofsG
|
||||
lda RRAMWRAMBNK1 with write allowed
|
||||
jmp xdosmli
|
||||
|
||||
irqexit .EQ *-ofsG
|
||||
lda bankid determine state of ram card (ROM/RAM)
|
||||
irqexit lda bankid determine state of ram card (ROM/RAM)
|
||||
|
||||
irqxit0 .EQ *-ofsG
|
||||
GP.irqxit0 beq .2 branch if ram card enabled.
|
||||
irqxit0 beq .2 branch if ram card enabled.
|
||||
bmi .1 branch if alternate $D000 enabled.
|
||||
|
||||
lsr determine if no ram card present.
|
||||
@ -174,25 +131,19 @@ GP.irqxit0 beq .2 branch if ram card enabled.
|
||||
.3 lda p8areg restore acc
|
||||
rti exit
|
||||
|
||||
irqent .EQ *-ofsG this entry only used when rom
|
||||
bit RRAMWRAMBNK1 was enabled at time of interrupt.
|
||||
bit RRAMWRAMBNK1
|
||||
irqent bit RRAMWRAMBNK1 this entry only used when rom
|
||||
bit RRAMWRAMBNK1 was enabled at time of interrupt.
|
||||
jmp irqrecev
|
||||
|
||||
bnkbyt1 .EQ *-ofsG
|
||||
.DA #0
|
||||
bnkbyt2 .EQ *-ofsG
|
||||
.DA #0
|
||||
bnkbyt1 .DA #0
|
||||
bnkbyt2 .DA #0
|
||||
.HS 00000000 pad to before $BFFA
|
||||
.DA #4 gsos compatibility byte ($BFFA)
|
||||
.DA #0 pad
|
||||
.DA #0 reserved
|
||||
.DA #0 version # of running interpreter
|
||||
.DA #0 preserved for System Utilities
|
||||
kversion .EQ *-ofsG kernal version
|
||||
.HS 23 represents release 2.0.3
|
||||
|
||||
* end of obj mli_1
|
||||
kversion .HS 23 represents release 2.0.3
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/PRODOS.203/PRODOS.S.GP
|
||||
|
@ -5,9 +5,7 @@ NEW
|
||||
* this routine handles interrupts and is coded to reach 'lreset' precisely at
|
||||
* address $FFCB (ROM rts opcode) for rom switching to function.
|
||||
|
||||
lanirq .EQ *-ofsR2
|
||||
.BS $2D9B-*
|
||||
H2D9B pha $2D9B-2DFF moved to $FF9B-FFFF
|
||||
lanirq pha $2D9B-2DFF moved to $FF9B-FFFF
|
||||
lda accsav
|
||||
sta oldacc
|
||||
pla
|
||||
@ -32,33 +30,27 @@ H2DC2 lda /romirq setup ROM re-entry
|
||||
pha
|
||||
lda #romirq
|
||||
pha
|
||||
gorom .EQ *-ofsR2
|
||||
sta RROMBNK2 hits ROM rts at $FFCB
|
||||
gorom sta RROMBNK2 hits ROM rts at $FFCB
|
||||
|
||||
* 'lreset' address must = $FFCB for rom switch i/o to work
|
||||
|
||||
lreset .EQ *-ofsR2
|
||||
lda rreset+1
|
||||
lreset lda rreset+1
|
||||
pha
|
||||
lda rreset
|
||||
pha
|
||||
jmp gorom
|
||||
rreset .EQ *-ofsR2
|
||||
.DA resetv-1 rts to resetv
|
||||
fix45 .EQ *-ofsR2
|
||||
sta p8areg A register savearea
|
||||
rreset .DA resetv-1 rts to resetv
|
||||
fix45 sta p8areg A register savearea
|
||||
lda oldacc
|
||||
sta accsav
|
||||
lda RRAMWRAMBNK1 read/write RAM bank 1
|
||||
lda RRAMWRAMBNK1
|
||||
lda afbank
|
||||
jmp irqxit0
|
||||
stypfx .EQ *-ofsR2 fix appletalk PFI bug
|
||||
sty newpfxptr
|
||||
stypfx sty newpfxptr fix appletalk PFI bug
|
||||
sty preflag prefix flag
|
||||
rts
|
||||
stapfx .EQ *-ofsR2
|
||||
sta newpfxptr
|
||||
stapfx sta newpfxptr
|
||||
sta preflag
|
||||
rts
|
||||
|
||||
@ -66,8 +58,7 @@ stapfx .EQ *-ofsR2
|
||||
|
||||
.DA nmivect nmi handler
|
||||
.DA lreset reset handler
|
||||
irqv .EQ *-ofsR2
|
||||
.DA lanirq irq handler
|
||||
irqv .DA lanirq irq handler
|
||||
|
||||
* end of obj mli_3
|
||||
*--------------------------------------
|
||||
|
@ -168,7 +168,7 @@ H216E jsr reloc
|
||||
pha restore interrupt status
|
||||
plp
|
||||
sta CLRC3ROM enable internal slot 3 ROM
|
||||
jsr H2C80 install ram disk
|
||||
jsr RAMDRV.Install
|
||||
|
||||
* check interrupt vector to determine ROM version
|
||||
|
||||
@ -389,47 +389,52 @@ H232B .DA #1 move interpreter loader code
|
||||
|
||||
dsp64 .DA #$01 move p8 dispatcher code
|
||||
.DA displc2 destination
|
||||
.DA birdbye-disp1obj length (must be <= 3 pages)
|
||||
.DA disp1obj source
|
||||
.DA $0300 length (must be <= 3 pages)
|
||||
.DA SEL0 source
|
||||
.HS FF done
|
||||
|
||||
newquitbl .DA #$01 move Bird's Bye code
|
||||
.DA displc2 dest
|
||||
.DA GQdisp-birdbye length (must be <= 3 pages)
|
||||
.DA birdbye source
|
||||
.DA $0300 length (must be <= 3 pages)
|
||||
.DA SEL1 source
|
||||
.HS FF done
|
||||
|
||||
altdsptbl .DA #$01 move GQuit launcher
|
||||
.DA displc2 destination
|
||||
.DA $0300 length (must be <= 3 pages)
|
||||
.DA GQdisp source
|
||||
.DA SEL2 source
|
||||
.DA #$01 move a copy of GQuit launcher
|
||||
.DA dispadr to dispadr for gsos
|
||||
.DA $0300 length (must be <= 3 pages)
|
||||
.DA GQdisp source
|
||||
.DA SEL2 source
|
||||
.HS FF done
|
||||
|
||||
* tables for moving 64k version of mli for execution
|
||||
|
||||
H2367 .DA #$01 relocation table. 1=move src to dst
|
||||
.DA lanirq destination
|
||||
.DA H2E00-H2D9B length to move
|
||||
.DA H2D9B source
|
||||
.DA $ff9b destination
|
||||
.DA $100-$9B length to move
|
||||
.DA IRQ source
|
||||
|
||||
.DA #$01
|
||||
.DA MLI globals
|
||||
.DA MLI dst
|
||||
.DA $0100 in one page
|
||||
.DA H2E00
|
||||
.DA GP src
|
||||
|
||||
.HS 00 0=clear buffers $D700-$DDFF
|
||||
.DA pathbuf
|
||||
.DA xdosorg-pathbuf
|
||||
|
||||
.DA #$01
|
||||
.DA xdosorg
|
||||
.DA ramsrc-xdosobj length of mli
|
||||
.DA xdosobj
|
||||
.DA $DE00 dst
|
||||
.DA $2100 length of mli
|
||||
.DA XDOS src
|
||||
|
||||
.DA #$01
|
||||
.DA rwts
|
||||
.DA disp1obj-blockio length of disk ii driver
|
||||
.DA blockio
|
||||
.DA $D000
|
||||
.DA $0700 length of disk ii driver
|
||||
.DA XRW
|
||||
|
||||
.HS FF done
|
||||
|
||||
* move thunderclock
|
||||
@ -438,6 +443,7 @@ rlclk64 .DA #$01 relocation table. 1=move src to dst
|
||||
.DA tclk_in destination
|
||||
.DA tclk_end-tclock_0 length of thunderclock driver
|
||||
.DA tclock_0 source
|
||||
|
||||
.DA #$04 4=relocate and move program
|
||||
.DA tclk_in
|
||||
.DA H2F69-tclock_0
|
||||
|
@ -4,19 +4,17 @@ NEW
|
||||
* /RAM driver (main bank portion)
|
||||
* origin = $FF00
|
||||
|
||||
ofsR2 .EQ *-lcdest offset from ram driver org
|
||||
|
||||
lcsrc cld no decimal.
|
||||
RAMDRV cld no decimal.
|
||||
ldx #$0B save 13 bytes of parms
|
||||
H2D03 lda A1L,x
|
||||
.1 lda A1L,x
|
||||
sta a1l1,x
|
||||
dex
|
||||
bpl H2D03
|
||||
bpl .1
|
||||
ldx #$01
|
||||
H2D0D lda passit,x save xfer vectors
|
||||
.2 lda passit,x save xfer vectors
|
||||
sta sp1,x
|
||||
dex
|
||||
bpl H2D0D
|
||||
bpl .2
|
||||
lda A4L get command.
|
||||
beq stat 0 = status
|
||||
cmp #$04 check for command too high.
|
||||
@ -33,11 +31,10 @@ H2D0D lda passit,x save xfer vectors
|
||||
* it it used for read, write and format. after the request is completed,
|
||||
* control is passed back to 'noerr'.
|
||||
|
||||
format lda #ramdest card entry point
|
||||
format lda #RAMXDRV card entry point
|
||||
sta passit
|
||||
lda /ramdest
|
||||
gocard .EQ *-ofsR2 also used by 'mainwrt'
|
||||
sta passit+1
|
||||
lda /RAMXDRV
|
||||
gocard sta passit+1 also used by 'mainwrt'
|
||||
sec direction ram -> card
|
||||
clv start with original zero page
|
||||
jmp xfer transfer control
|
||||
@ -46,7 +43,7 @@ ioerr lda #$27
|
||||
lda #$2B write protect error.
|
||||
H2D41 sec flags error
|
||||
bcs H2D47
|
||||
noerr .EQ *-ofsR2
|
||||
noerr .EQ *
|
||||
stat lda #$00
|
||||
clc
|
||||
H2D47 php save status
|
||||
@ -64,8 +61,7 @@ H2D4B lda a1l1,x
|
||||
pla restore error code
|
||||
plp and status.
|
||||
rts
|
||||
mainwrt .EQ *-ofsR2 transfer data to card.
|
||||
sta SETWRITEAUX write to alt 48K
|
||||
mainwrt sta SETWRITEAUX write to alt 48K
|
||||
ldy #$00
|
||||
H2D6A lda (A1L),y pointers set in card by 'setptr'
|
||||
sta (A4L),y
|
||||
@ -78,14 +74,13 @@ H2D6A lda (A1L),y pointers set in card by 'setptr'
|
||||
sta passit
|
||||
lda /donewrt
|
||||
jmp gocard
|
||||
sp1 .EQ *-ofsR2
|
||||
.HS 0000
|
||||
a1l1 .EQ *-ofsR2 13 bytes of storage
|
||||
sp1 .HS 0000
|
||||
a1l1 .BS 13 13 bytes of storage
|
||||
|
||||
* end of obj ram_2
|
||||
|
||||
r2_end .EQ *
|
||||
.BS $2D9B-* fill to lanirq ($FF9B see note below)
|
||||
RAMDRV.END .EQ *
|
||||
.BS $FF9B-* fill to lanirq ($FF9B see note below)
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM
|
||||
|
@ -5,34 +5,32 @@ NEW
|
||||
* /RAM installer - transfer part of the driver to the aux bank
|
||||
* and front part of the driver to the main bank (language card).
|
||||
|
||||
RAM_1 .BS $2C80-*
|
||||
RAMDRV.Install ldy #$99 move $9A bytesfrom lcsrc to lcdest.
|
||||
|
||||
H2C80 ldy #$99 move $9A bytesfrom lcsrc to lcdest.
|
||||
|
||||
.1 lda lcsrc,y transfer main bank portion of driver
|
||||
sta lcdest,y
|
||||
.1 lda RAM,y transfer main bank portion of driver
|
||||
sta RAMDRV,y
|
||||
dey
|
||||
cpy #$FF
|
||||
bne .1
|
||||
|
||||
ldx #ramsrc set up to move aux portion of driver
|
||||
ldx #RAMX set up to move aux portion of driver
|
||||
stx A1L
|
||||
dex
|
||||
stx A2L
|
||||
ldx /ramsrc
|
||||
ldx /RAMX
|
||||
stx A1L+1
|
||||
inx
|
||||
stx A2L+1
|
||||
lda #ramdest
|
||||
lda #RAMXDRV
|
||||
sta A4L
|
||||
lda /ramdest ramsrc to ramdest
|
||||
lda /RAMXDRV RAMX to RAMXDRV
|
||||
sta A4L+1
|
||||
sec irection = to aux bank.
|
||||
jsr auxmove move aux bank portion of driver.
|
||||
|
||||
lda #lcdest put driver address into
|
||||
lda #RAMDRV put driver address into
|
||||
sta drivertbl2+6 slot 3, drive 2.
|
||||
lda /lcdest
|
||||
lda /RAMDRV
|
||||
sta drivertbl2+7
|
||||
|
||||
inc numdevs count (-1) active devices
|
||||
|
@ -16,9 +16,7 @@ NEW
|
||||
* $60-$67: returns blocks $68-$7F in bank 1 of language card
|
||||
* $68-$7F: returns blocks $68-$7F in bank 2 of language card
|
||||
|
||||
ofsR0 .EQ *-ramdest offset to /RAM driver org
|
||||
|
||||
ramsrc lda RD80STORE read 80 store
|
||||
H5100 lda RD80STORE read 80 store
|
||||
pha save for later
|
||||
sta CLR80STORE turn off 80 store
|
||||
ldx #$04 move the parameters for use:
|
||||
@ -74,8 +72,7 @@ L5163 tax save R1 for later.
|
||||
jsr setptr get direction
|
||||
php and save it.
|
||||
bcs L51B8 if it's a write.
|
||||
lcrd .EQ *-ofsR0
|
||||
txa get R1 back
|
||||
lcrd txa get R1 back
|
||||
cmp #$CF which bank is it in ?
|
||||
bcs L5173 in main bank.
|
||||
ora #$10 in secondary bank.
|
||||
@ -118,12 +115,9 @@ L51B8 jsr blockdo0 transfer main to dbuf.
|
||||
* language card, so the language card is always switched in. if cmd is 2, a
|
||||
* write is done (R2->R1); if cmd is 1, a read is done (R1->R2).
|
||||
|
||||
blockdo0 .EQ *-ofsR0 set up R1 = dbuf
|
||||
lda /dbuf
|
||||
blockdo1 .EQ *-ofsR0
|
||||
sta R01
|
||||
blockdo .EQ *-ofsR0
|
||||
jsr setptr set pointers.
|
||||
blockdo0 lda /dbuf set up R1 = dbuf
|
||||
blockdo1 sta R01
|
||||
blockdo jsr setptr set pointers.
|
||||
bcs L51DB it's a write.
|
||||
sta CLRWRITEAUX transfer buffer directly to main.
|
||||
tay 0 left from setptr.
|
||||
@ -134,8 +128,8 @@ L51CC lda (A1L),y transfer A1,A2 to A4,A3
|
||||
dey
|
||||
bne L51CC
|
||||
sta SETWRITEAUX back the way it was.
|
||||
donewrt .EQ *-ofsR0 mainwrt returns here
|
||||
rts
|
||||
donewrt rts mainwrt returns here
|
||||
|
||||
L51DB lda #mainwrt pointers set up,
|
||||
sta passit pass control to main ram
|
||||
lda /mainwrt
|
||||
@ -143,8 +137,7 @@ L51DB lda #mainwrt pointers set up,
|
||||
|
||||
* setptr is used by other routines to set up pointers and dtect read or write
|
||||
|
||||
setptr .EQ *-ofsR0
|
||||
lda tcmd is it read or write ?
|
||||
setptr lda tcmd is it read or write ?
|
||||
lsr
|
||||
bcs L5208 taken if write.
|
||||
lda R2H destination page
|
||||
@ -186,12 +179,9 @@ tzip jsr clrbuf0 fill dbuf with 0's
|
||||
* clrbuf fills the buffer indicated by R01 to 0's.
|
||||
* should only be called on a read or format.
|
||||
|
||||
clrbuf0 .EQ *-ofsR0
|
||||
lda /dbuf dbuf is temp buffer.
|
||||
clrbuf1 .EQ *-ofsR0
|
||||
sta R01 assign to block.
|
||||
clrbuf2 .EQ *-ofsR0
|
||||
jsr setptr set pointers
|
||||
clrbuf0 lda /dbuf dbuf is temp buffer.
|
||||
clrbuf1 sta R01 assign to block.
|
||||
clrbuf2 jsr setptr set pointers
|
||||
tay acc = 0
|
||||
L523A sta (A1L),y
|
||||
sta (A2L),y
|
||||
@ -203,8 +193,7 @@ L523A sta (A1L),y
|
||||
* so that 8k data files will be contiguous (the index
|
||||
* blocks will not be placed within data).
|
||||
|
||||
treg .EQ *-ofsR0
|
||||
cmp #$04 page 4 = vdir
|
||||
treg cmp #$04 page 4 = vdir
|
||||
bne L524A not vdir, continue
|
||||
lda #$07 else transfer block 7
|
||||
bne L5258
|
||||
@ -227,7 +216,7 @@ L525E cmp #$11 if <=17 then done
|
||||
sbc #$11 else block=block-17.
|
||||
inx iteration count.
|
||||
bpl L525E should branch always
|
||||
.HS 00 otherwise crash !!!
|
||||
brk otherwise crash !!!
|
||||
L5268 tay remainder in y
|
||||
|
||||
* if remainder is 1 then it's an index block:
|
||||
@ -242,7 +231,7 @@ L5268 tay remainder in y
|
||||
txa index = 2 * (8 + x)
|
||||
clc
|
||||
adc #$08
|
||||
bne L5285 multiply by 2.
|
||||
bne times2 multiply by 2.
|
||||
L5273 inx iteration + 1.
|
||||
txa page = 2 * (16 + 8x)
|
||||
asl
|
||||
@ -256,8 +245,7 @@ L5273 inx iteration + 1.
|
||||
tya
|
||||
L5281 clc
|
||||
adc R01
|
||||
times2 .EQ *-ofsR0
|
||||
L5285 asl acc = 2 * acc
|
||||
times2 asl acc = 2 * acc
|
||||
jsr blockdo1 store in R01 and transfer
|
||||
jmp exitcard and return
|
||||
|
||||
@ -265,8 +253,7 @@ L5285 asl acc = 2 * acc
|
||||
* 16 bytes long; the rest of the block is synthesized. the temporary buffer
|
||||
* at $800 is used to build/read a full size bitmap block.
|
||||
|
||||
tbmap .EQ *-ofsR0
|
||||
lda /dbuf use temp buffer as block
|
||||
tbmap lda /dbuf use temp buffer as block
|
||||
sta R01
|
||||
jsr setptr set pointers, test read/write.
|
||||
bcs L52A9 branch if it's write.
|
||||
@ -287,48 +274,36 @@ L52B1 lda (A4L),y (pointer set by setptr)
|
||||
bpl L52B1
|
||||
jmp exitcard
|
||||
|
||||
formatflg .EQ *-ofsR0
|
||||
.HS 00 not formatted yet
|
||||
tcmd .EQ *-ofsR0
|
||||
.HS 00 command
|
||||
formatflg .HS 00 not formatted yet
|
||||
tcmd .HS 00 command
|
||||
.HS 00 unit (not used)
|
||||
R2L .EQ *-ofsR0
|
||||
.HS 00 R2 = user buffer
|
||||
R2H .EQ *-ofsR0
|
||||
.HS 00
|
||||
R01 .EQ *-ofsR0
|
||||
.HS 00 page requested
|
||||
BITMAP .EQ *-ofsR0
|
||||
.HS 00FFFFFF blocks 0-7 used
|
||||
R2L .HS 00 R2 = user buffer
|
||||
R2H .HS 00
|
||||
R01 .HS 00 page requested
|
||||
BITMAP .HS 00FFFFFF blocks 0-7 used
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFE
|
||||
VDIR .EQ *-ofsR0 start of vdir.
|
||||
.HS F3 storage type = F, name length = 3
|
||||
VDIR .HS F3 storage type = F, name length = 3
|
||||
.AS "RAM"
|
||||
access .EQ *-ofsR0
|
||||
.DA #$C3 destroy, rename, read enabled
|
||||
access .DA #$C3 destroy, rename, read enabled
|
||||
.HS 27 entry length
|
||||
.HS 0D
|
||||
.HS 0000
|
||||
.HS 0300 block 3
|
||||
.HS 7F 128 blocks
|
||||
|
||||
exitcard .EQ *-ofsR0
|
||||
lda RRAMWRAMBNK1 restore language card
|
||||
exitcard lda RRAMWRAMBNK1 restore language card
|
||||
lda RRAMWRAMBNK1
|
||||
pla get 80store
|
||||
bpl L52EA 80store wasn't on
|
||||
sta SET80STORE enable 80store
|
||||
L52EA jmp bypass jump around passit
|
||||
passit .EQ *-ofsR0
|
||||
.HS 0000
|
||||
bypass .EQ *-ofsR0
|
||||
lda #noerr set up return to noerr
|
||||
passit .HS 0000
|
||||
bypass lda #noerr set up return to noerr
|
||||
sta passit
|
||||
lda /noerr
|
||||
ex1 .EQ *-ofsR0
|
||||
sta passit+1 also used by blockwrite
|
||||
ex1 sta passit+1 also used by blockwrite
|
||||
clc transfer card to main
|
||||
clv use standard zeropage/stack
|
||||
jmp xfer jmp back from language card.
|
||||
|
@ -2,7 +2,7 @@ NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
.OP 65816
|
||||
.OR $0000
|
||||
.OR $2000
|
||||
.TF PRODOS203,TSYS
|
||||
*--------------------------------------
|
||||
.INB INC/ZP.I
|
||||
@ -48,11 +48,11 @@ TLTextMountVolume .EQ $1201
|
||||
P8QUIT .EQ $E0D000
|
||||
GSOS .EQ $E100A8
|
||||
GSOS2 .EQ $E100B0
|
||||
OS_BOOT .EQ $E100BD indicates O/S initially booted
|
||||
OS_BOOT .EQ $E100BD indicates O/S initially booted
|
||||
*--------------------------------------
|
||||
lookptr .EQ $0A
|
||||
idapple .EQ $0C model machine id
|
||||
idxl .EQ $10 general use 16 bit index pointer
|
||||
idapple .EQ $0C model machine id
|
||||
idxl .EQ $10 general use 16 bit index pointer
|
||||
devid .EQ $12
|
||||
src .EQ $12
|
||||
dst .EQ $14
|
||||
@ -72,96 +72,94 @@ A2H .EQ $3F
|
||||
A3L .EQ $40
|
||||
A4L .EQ $42
|
||||
unitnum .EQ $43
|
||||
buf .EQ $44 2-byte data buffer pointer which
|
||||
accsav .EQ $45 overlaps accsav (temp acc save byte)
|
||||
bloknml .EQ $46 used mostly as 16 bit block # pointer
|
||||
zpt .EQ $48 highly used zero page index pointer
|
||||
datptr .EQ $4A ptr to data area of buffer.
|
||||
sos .EQ $4C sos buffer pointer.
|
||||
usrbuf .EQ $4E data ptr in user buffer.
|
||||
buf .EQ $44 2-byte data buffer pointer which
|
||||
accsav .EQ $45 overlaps accsav (temp acc save byte)
|
||||
bloknml .EQ $46 used mostly as 16 bit block # pointer
|
||||
zpt .EQ $48 highly used zero page index pointer
|
||||
datptr .EQ $4A ptr to data area of buffer.
|
||||
sos .EQ $4C sos buffer pointer.
|
||||
usrbuf .EQ $4E data ptr in user buffer.
|
||||
|
||||
* zero page variables for Bird's Better Bye
|
||||
|
||||
smparms .EQ $60 set mark parms
|
||||
sm_refn .EQ $61 file reference number
|
||||
fpos_lo .EQ $62 new file position (3 bytes)
|
||||
smparms .EQ $60 set mark parms
|
||||
sm_refn .EQ $61 file reference number
|
||||
fpos_lo .EQ $62 new file position (3 bytes)
|
||||
fpos_mid .EQ $63
|
||||
fpos_hi .EQ $64
|
||||
lstpntr .EQ $65 device list pointer (16 bit)
|
||||
valcnt .EQ $67 name counter
|
||||
lstpntr .EQ $65 device list pointer (16 bit)
|
||||
valcnt .EQ $67 name counter
|
||||
|
||||
filecount .EQ $68 # of displayable files in directory
|
||||
namelen .EQ $69 length of filename
|
||||
gp_cnt .EQ $6A general purpose counter
|
||||
dlevel .EQ $6B directory level
|
||||
fnstore .EQ $6C filename storage pointer (16 bit)
|
||||
entlen .EQ $6E directory entry length
|
||||
entblk .EQ $6F directory entries/block
|
||||
filecnt .EQ $70 directory file count (16 bit)
|
||||
blkfl .EQ $72 block flag / file counter
|
||||
topname .EQ $73 index # of top name in display
|
||||
filetyps .EQ $74 128 byte table of filetypes
|
||||
filecount .EQ $68 # of displayable files in directory
|
||||
namelen .EQ $69 length of filename
|
||||
gp_cnt .EQ $6A general purpose counter
|
||||
dlevel .EQ $6B directory level
|
||||
fnstore .EQ $6C filename storage pointer (16 bit)
|
||||
entlen .EQ $6E directory entry length
|
||||
entblk .EQ $6F directory entries/block
|
||||
filecnt .EQ $70 directory file count (16 bit)
|
||||
blkfl .EQ $72 block flag / file counter
|
||||
topname .EQ $73 index # of top name in display
|
||||
filetyps .EQ $74 128 byte table of filetypes
|
||||
errnum .EQ $DE
|
||||
*--------------------------------------
|
||||
tst128 .EQ $0080 temp page 0 routine for memory test
|
||||
tst128 .EQ $0080 temp page 0 routine for memory test
|
||||
auxsp .EQ $0101
|
||||
ramdest .EQ $0200 load address for aux bank /RAM driver
|
||||
inbuf .EQ $0200 keyboard buffer
|
||||
pbuf .EQ $0280 prefix buffer
|
||||
p3vect .EQ $03F0 page 3 vectors (16 bytes)
|
||||
softev .EQ $03F2 RESET vector
|
||||
pwredup .EQ $03F4 power up byte
|
||||
nmivect .EQ $03FB nmi handler
|
||||
txtp2 .EQ $0400 test location for aux card
|
||||
vline10 .EQ $04A8 line 10 of display
|
||||
vmode .EQ $04FB video firmware operating mode
|
||||
vline11 .EQ $0528 line 11 of display
|
||||
clkmode .EQ $0538 clock mode
|
||||
ch80col .EQ $057B 80 column ch position
|
||||
vline12 .EQ $05A8 line 12 of display
|
||||
vline5 .EQ $0600 line 5 of display
|
||||
vline13 .EQ $0628 line 13 of display
|
||||
vline14 .EQ $06A8 line 14 of display
|
||||
vline23 .EQ $0750 line 23 of display
|
||||
vline16 .EQ $07A8 line 16 of display
|
||||
vline24 .EQ $07D0 line 24 of display
|
||||
RAMXDRV .EQ $0200 load address for aux bank /RAM driver
|
||||
inbuf .EQ $0200 keyboard buffer
|
||||
pbuf .EQ $0280 prefix buffer
|
||||
p3vect .EQ $03F0 page 3 vectors (16 bytes)
|
||||
softev .EQ $03F2 RESET vector
|
||||
pwredup .EQ $03F4 power up byte
|
||||
nmivect .EQ $03FB nmi handler
|
||||
txtp2 .EQ $0400 test location for aux card
|
||||
vmode .EQ $04FB video firmware operating mode
|
||||
clkmode .EQ $0538 clock mode
|
||||
ch80col .EQ $057B 80 column ch position
|
||||
vline5 .EQ $0600 line 5 of display
|
||||
vline10 .EQ $04A8 line 10 of display
|
||||
vline11 .EQ $0528 line 11 of display
|
||||
vline12 .EQ $05A8 line 12 of display
|
||||
vline13 .EQ $0628 line 13 of display
|
||||
vline14 .EQ $06A8 line 14 of display
|
||||
vline16 .EQ $07A8 line 16 of display
|
||||
vline23 .EQ $0750 line 23 of display
|
||||
vline24 .EQ $07D0 line 24 of display
|
||||
lodintrp .EQ $800
|
||||
DirBlkBuf .EQ $C00
|
||||
dbuf .EQ $0C00 8 page directory buffer
|
||||
vblock1 .EQ $0E00 ramdisk directory block
|
||||
volbuf .EQ $0F00 volume buffer
|
||||
dbuf .EQ $0C00 8 page directory buffer
|
||||
vblock1 .EQ $0E00 ramdisk directory block
|
||||
volbuf .EQ $0F00 volume buffer
|
||||
dispadr .EQ $1000
|
||||
iobuf .EQ $1400 i/o buffer
|
||||
fbuf .EQ $1800 FCB buffer
|
||||
op_buf .EQ $1C00 open file buffer (selector)
|
||||
sysentry .EQ $2000 .SYS file load address
|
||||
prodos8 .EQ $BF00 prodos MLI and global page
|
||||
iobuf .EQ $1400 i/o buffer
|
||||
fbuf .EQ $1800 FCB buffer
|
||||
op_buf .EQ $1C00 open file buffer (selector)
|
||||
sysentry .EQ $2000 .SYS file load address
|
||||
|
||||
phaseoff .EQ $C080 disk port
|
||||
motoroff .EQ $C088 disk port
|
||||
motoron .EQ $C089 disk port
|
||||
drv0en .EQ $C08A disk port
|
||||
q6l .EQ $C08C disk port
|
||||
q6h .EQ $C08D disk port
|
||||
q7l .EQ $C08E disk port
|
||||
q7h .EQ $C08F disk port
|
||||
phaseoff .EQ $C080 disk port
|
||||
motoroff .EQ $C088 disk port
|
||||
motoron .EQ $C089 disk port
|
||||
drv0en .EQ $C08A disk port
|
||||
q6l .EQ $C08C disk port
|
||||
q6h .EQ $C08D disk port
|
||||
q7l .EQ $C08E disk port
|
||||
q7h .EQ $C08F disk port
|
||||
|
||||
rdtcp .EQ $C108 Thunderclock read entry
|
||||
wttcp .EQ $C10B Thunderclock write entry
|
||||
rdtcp .EQ $C108 Thunderclock read entry
|
||||
wttcp .EQ $C10B Thunderclock write entry
|
||||
|
||||
auxmove .EQ $C311 move (3C)-(3E) to (42)
|
||||
auxmove .EQ $C311 move (3C)-(3E) to (42)
|
||||
xfer .EQ $C314
|
||||
|
||||
rwts .EQ $D000 disk ii driver in bank 1
|
||||
displc2 .EQ $D100 system death routine stored in bank 2
|
||||
pathbuf .EQ $D700 pathname buffer
|
||||
tclk_in .EQ $D742 clock driver in bank 2
|
||||
fcbbuf .EQ $D800 fcb buffer
|
||||
vcbbuf .EQ $D900 vcb buffer
|
||||
bmbuf .EQ $DA00 512 byte bitmap buffer
|
||||
gbuf .EQ $DC00 general purpose 512 byte block buffer
|
||||
xdosorg .EQ $DE00 xdos MLI in aux memory
|
||||
lcdest .EQ $FF00
|
||||
rwts .EQ $D000 disk ii driver in bank 1
|
||||
displc2 .EQ $D100 system death routine stored in bank 2
|
||||
pathbuf .EQ $D700 pathname buffer
|
||||
tclk_in .EQ $D742 clock driver in bank 2
|
||||
fcbbuf .EQ $D800 fcb buffer
|
||||
vcbbuf .EQ $D900 vcb buffer
|
||||
bmbuf .EQ $DA00 512 byte bitmap buffer
|
||||
gbuf .EQ $DC00 general purpose 512 byte block buffer
|
||||
xdosorg .EQ $DE00 xdos MLI in aux memory
|
||||
*--------------------------------------
|
||||
* $2000 mli_0 mli loader/relocator
|
||||
* $2C80 ram_1 installer for /RAM
|
||||
@ -176,17 +174,28 @@ lcdest .EQ $FF00
|
||||
* $5A00 sel_0 dispatcher
|
||||
* $5D00 sel_1 enhanced quit code (Bird's Better Bye)
|
||||
* $6000 sel_2 GQuit dispatcher support
|
||||
|
||||
.PH $2000
|
||||
*--------------------------------------
|
||||
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.LDR.B
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.RAMI
|
||||
|
||||
RAM .PH $FF00
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.RAM
|
||||
.EP
|
||||
|
||||
IRQ .PH $FF9B
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.IRQ
|
||||
.EP
|
||||
|
||||
GP .PH $BF00
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.GP
|
||||
.EP
|
||||
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.TCLK
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.CCLK
|
||||
|
||||
XDOS .PH $DE00
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.A
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.B
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.C
|
||||
@ -194,13 +203,27 @@ lcdest .EQ $FF00
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.E
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.F
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.M
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.RAMX
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.DISKII
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL0
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL1
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL2
|
||||
.EP
|
||||
|
||||
.EP
|
||||
RAMX .PH $200
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.RAMX
|
||||
.EP
|
||||
|
||||
XRW .PH $D000
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.DISKII
|
||||
.EP
|
||||
|
||||
SEL0 .PH $D100
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL0
|
||||
.EP
|
||||
|
||||
SEL1 .PH $D100
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL1
|
||||
.EP
|
||||
|
||||
SEL2 .PH $D100
|
||||
.INB USR/SRC/PRODOS.203/PRODOS.S.SEL2
|
||||
.EP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/PRODOS.203/PRODOS.S
|
||||
|
Loading…
x
Reference in New Issue
Block a user