Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-10 17:46:56 +02:00
parent 683ebaf9cd
commit 834281c40b
15 changed files with 1692 additions and 1907 deletions

Binary file not shown.

View File

@ -4,6 +4,7 @@ NEW
* Cortland clock driver
* $2F80-$2FFC moved to $D742
.OP 65816
ofsC .EQ cclock_0-tclk_in offset to Cortland clock org
cclock_0 SHORT I,M 8 bit mode.
@ -53,15 +54,13 @@ H2FB9 sta p8date+1 year
xce to continue with Prodos 8
rts
savestate .EQ *-ofsC
.DA #00' state of the state register
dc c'JIMJAYKERRY'
dc h'26' ampersand (Orca assembler doesn't like)
dc c'MIKE'
.DA #0000000000000000' pad 0's until length
.DA #0000000000000000' of driver = 125 bytes.
.DA #000000000000'
.HS 00 state of the state register
.AS "JIMJAYKERRY&MIKE"
.HS 0000000000000000 pad 0's until length
.HS 0000000000000000 of driver = 125 bytes.
.HS 000000000000
cclk_end .EQ * end of obj cclock_0.
dc h'000000' pad to page boundary
.HS 000000 pad to page boundary
LONGI OFF
*--------------------------------------
MAN

View File

@ -9,6 +9,7 @@ NEW
* the cld at blockio must be present to determine bank of $D000
* $5300-5A00 moved to language card bank 1 at $D000
.OP 6502
.OR $D000
blockio cld $D8 to flag language card bank 1 (main)
@ -67,7 +68,7 @@ regrwts ldy #$01 retry count
cmp iobpdn same drive used before ?
sta iobpdn save it for next time.
php keep results of compare.
asl a get drive # into carry.
asl get drive # into carry.
lda motoron,x turn on the drive.
bcc L5362 branch if drive 1 selected.
inx select drive 2.
@ -142,7 +143,7 @@ L53BE ldy track check track
lda curtrk preserve destination track
pha
tya
asl a
asl
L53CC jsr settrk
pla
jsr myseek
@ -160,7 +161,7 @@ L53D5 lda sect is this the right sector ?
bcs L53A4 if bad read
L53E7 lda #$00
dc h'D0' bne branch never taken (skip 1 byte)
.HS D0 bne branch never taken (skip 1 byte)
hndlerr sec
sta ibstat error #
ldx A2L slot offset
@ -174,7 +175,7 @@ statdne .EQ *-ofsD
L53FD ldx A2L
lda q6h,x test for write protected
lda q7l,x
rol a write protect-->carry-->bit 0=1
rol write protect-->carry-->bit 0=1
lda q6l,x keep in read mode
jmp statdne
myseek .EQ *-ofsD
@ -254,7 +255,7 @@ setphase .EQ *-ofsD
L5487 lda curtrk get current track
clrphase .EQ *-ofsD
and #$03 mask for 1 of 4 phases
rol a double for phaseon/off index
rol double for phaseon/off index
ora A2L
tax
lda phaseoff,x turn on/off one phase
@ -270,28 +271,28 @@ clrphase .EQ *-ofsD
* other tables since no valid nibles are in these ranges.
dnibl .EQ *-ofsD aligned to page boundary minus $96
.DA #0004FFFF080CFF10'
.DA #1418'
.HS 0004FFFF080CFF10
.HS 1418
twobit3 .EQ *-ofsD used in fast prenib as lookup for
dc h'008040C0FFFF' 2-bit quantities.
.DA #1C20FFFFFF24282C'
.DA #3034FFFF383C4044'
.DA #484CFF5054585C60'
.DA #6468'
.HS 008040C0FFFF 2-bit quantities.
.HS 1C20FFFFFF24282C
.HS 3034FFFF383C4044
.HS 484CFF5054585C60
.HS 6468
twobit2 .EQ *-ofsD used in fast prenib.
dc h'00201030'
.HS 00201030
endmrks .EQ *-ofsD table using 'unused' nibbles:
dc h'DEAAEBFF' ($C4,$C5,$C6,$C7)
.DA #FFFFFF6CFF70'
.DA #7478FFFFFF7CFFFF'
.DA #8084FF888C909498'
.DA #9CA0'
.HS DEAAEBFF ($C4,$C5,$C6,$C7)
.HS FFFFFF6CFF70
.HS 7478FFFFFF7CFFFF
.HS 8084FF888C909498
.HS 9CA0
twobit1 .EQ *-ofsD used in fast prenib.
dc h'0008040CFFA4'
.DA #A8ACFFB0B4B8BCC0'
.DA #C4C8FFFFCCD0D4D8'
.DA #DCE0FFE4E8ECF0F4'
.DA #F8FC'
.HS 0008040CFFA4
.HS A8ACFFB0B4B8BCC0
.HS C4C8FFFFCCD0D4D8
.HS DCE0FFE4E8ECF0F4
.HS F8FC
* 6-bit to 2-bit conversion tables:
*
@ -303,11 +304,11 @@ twobit1 .EQ *-ofsD used in fast prenib.
* page align the following tables:
dnibl2 .EQ *-ofsD
dc h'00'
.HS 00
dnibl3 .EQ *-ofsD
dc h'00'
.HS 00
dnibl4 .EQ *-ofsD
dc h'00'
.HS 00
* 6-bit to 7-bit nibl conversion table
*
@ -315,89 +316,89 @@ dnibl4 .EQ *-ofsD
* or with no adjacent ones (except B7) are excluded.
nibl .EQ *-ofsD
.DA #960200'
.DA #00970100009A0300'
.DA #009B0002009D0202'
.DA #009E0102009F0302'
.DA #00A6000100A70201'
.DA #00AB010100AC0301'
.DA #00AD000300AE0203'
.DA #00AF010300B20303'
.DA #00B3000002B40200'
.DA #02B5010002B60300'
.DA #02B7000202B90202'
.DA #02BA010202BB0302'
.DA #02BC000102BD0201'
.DA #02BE010102BF0301'
.DA #02CB000302CD0203'
.DA #02CE010302CF0303'
.DA #02D3000001D60200'
.DA #01D7010001D90300'
.DA #01DA000201DB0202'
.DA #01DC010201DD0302'
.DA #01DE000101DF0201'
.DA #01E5010101E60301'
.DA #01E7000301E90203'
.DA #01EA010301EB0303'
.DA #01EC000003ED0200'
.DA #03EE010003EF0300'
.DA #03F2000203F30202'
.DA #03F4010203F50302'
.DA #03F6000103F70201'
.DA #03F9010103FA0301'
.DA #03FB000303FC0203'
.DA #03FD010303FE0303'
.DA #03FF'
.HS 960200
.HS 00970100009A0300
.HS 009B0002009D0202
.HS 009E0102009F0302
.HS 00A6000100A70201
.HS 00AB010100AC0301
.HS 00AD000300AE0203
.HS 00AF010300B20303
.HS 00B3000002B40200
.HS 02B5010002B60300
.HS 02B7000202B90202
.HS 02BA010202BB0302
.HS 02BC000102BD0201
.HS 02BE010102BF0301
.HS 02CB000302CD0203
.HS 02CE010302CF0303
.HS 02D3000001D60200
.HS 01D7010001D90300
.HS 01DA000201DB0202
.HS 01DC010201DD0302
.HS 01DE000101DF0201
.HS 01E5010101E60301
.HS 01E7000301E90203
.HS 01EA010301EB0303
.HS 01EC000003ED0200
.HS 03EE010003EF0300
.HS 03F2000203F30202
.HS 03F4010203F50302
.HS 03F6000103F70201
.HS 03F9010103FA0301
.HS 03FB000303FC0203
.HS 03FD010303FE0303
.HS 03FF
* nibl buffer 'nbuf2' must be on a page boundary !!!
nbuf2 .EQ *-ofsD nibl buffer for read/write of low
ds 86 2-bits of each byte.
.BS 86 2-bits of each byte.
ibtrk .EQ *-ofsD
.DA #00'
.HS 00
ibsect .EQ *-ofsD
dc h'00'
.HS 00
ibstat .EQ *-ofsD
dc h'00'
.HS 00
iobpdn .EQ *-ofsD
dc h'00'
.HS 00
curtrk .EQ *-ofsD
dc h'00'
dc h'00000000000000' for slots 1 thru 7
.DA #00000000000000' drives 1 & 2
.HS 00
.HS 00000000000000 for slots 1 thru 7
.HS 00000000000000 drives 1 & 2
retrycnt .EQ *-ofsD
dc h'00'
.HS 00
seekcnt .EQ *-ofsD
dc h'00'
.HS 00
trkcnt .EQ *-ofsD halftracks moved count.
countn .EQ *-ofsD 'must find' count.
last .EQ *-ofsD 'odd bit' nibls.
dc h'00'
.HS 00
csum .EQ *-ofsD used for address header cksum
dc h'00'
.HS 00
csstv .EQ *-ofsD
.DA #00'
.HS 00
sect .EQ *-ofsD
dc h'00'
.HS 00
track .EQ *-ofsD
montimel .EQ *-ofsD
dc h'00'
.HS 00
montimeh .EQ *-ofsD also 'volume'
dc h'00'
.HS 00
prior .EQ *-ofsD
dc h'00'
.HS 00
trkn .EQ *-ofsD
dc h'00'
.HS 00
* phase on, off time tables
* in 100 usec intervals (seek)
ontable .EQ *-ofsD
dc h'013028'
.DA #24201E1D1C1C'
.HS 013028
.HS 24201E1D1C1C
offtable .EQ *-ofsD
dc h'702C'
.DA #26221F1E1D1C1C'
.HS 702C
.HS 26221F1E1D1C1C
* mswait subroutine
*
@ -456,7 +457,7 @@ L56BA lda q6l,x
L56C6 sta csum
L56C9 lda q6l,x read 'odd bit' nibl
bpl L56C9 *** no page cross ***
rol a align odd bits, '1' into lsb.
rol align odd bits, '1' into lsb.
sta last save them.
L56D2 lda q6l,x read 'even bit' nibl
bpl L56D2 *** no page cross ***
@ -941,15 +942,15 @@ L59E6 sec error.
L59E8 clc
rts end of obj xrw_0
.DA #0000' pad bytes to $D6EC (pathbuf-$14)
.HS 0000 pad bytes to $D6EC (pathbuf-$14)
* variables used by mli for smartport interface
spstatlist .EQ *-ofsD ref pathbuf-$14
dc h'00000000' smartport status list buffer
.HS 00000000 smartport status list buffer
spunit .EQ *-ofsD ref pathbuf-$10
.DA #0000000000000000' smartport unit numbers
.DA #0000000000000000'
.HS 0000000000000000 smartport unit numbers
.HS 0000000000000000
* pathname buffer starts at this page boundary (pathbuf = $D700)
*--------------------------------------

View File

@ -10,41 +10,41 @@ 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.
.DA tclk_in' clock routine entry address.
.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 #00'
.DA #0
drivertbl1 .EQ *-ofsG device driver table 1
dc i2'nodevice' slot 0 reserved
dc i2'nodevice' s1, d1
dc i2'nodevice' s2, d1
dc i2'nodevice' s3, d1
dc i2'nodevice' s4, d1
dc i2'nodevice' s5, d1
dc i2'nodevice' s6, d1
dc i2'nodevice' s7, d1
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
drivertbl2 .EQ *-ofsG device driver table 2
dc i2'nodevice' slot 0 reserved
dc i2'nodevice' s1, d2
dc i2'nodevice' s2, d2
dc i2'nodevice' s3, d2
dc i2'nodevice' s4, d2
dc i2'nodevice' s5, d2
dc i2'nodevice' s6, d2
dc i2'nodevice' s7, d2
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
devnum .EQ *-ofsG most recent accessed device
.DA #00'
.DA #0
numdevs .EQ *-ofsG count (-1) active devices
dc h'FF'
.DA #$ff
devlist .EQ *-ofsG active device list
dc h'00000000000000' up to 14 units may be active
dc h'00000000000000'
.DA #00'
msb off
dc c'(C)APPLE '
.HS 00000000000000 up to 14 units may be active
.HS 00000000000000
.DA #0
.AS "(C)APPLE "
mlient1 .EQ *-ofsG
php
sei
@ -53,30 +53,30 @@ aftirq .EQ *-ofsG irq returns here.
sta ramin read/write RAM bank 1
jmp fix45 restore $45 after interrupt in LC
oldacc .EQ *-ofsG
.DA #00'
.DA #0
afbank .EQ *-ofsG
dc h'00'
.HS 0
* memory map of lower 48k. each bit represents 1 page.
* protected pages = 1, unprotected = 0
memmap .EQ *-ofsG P8 memory bitmap
dc h'C000000000000000'
dc h'0000000000000000'
.DA #0000000000000001'
.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
dc h'0000' file #1
dc h'0000' file #2
dc h'0000' file #3
dc h'0000' file #4
.DA #0000' file #5
dc h'0000' file #6
dc h'0000' file #7
dc h'0000' file #8
.HS 0000 file #1
.HS 0000 file #2
.HS 0000 file #3
.HS 0000 file #4
.HS 0000 file #5
.HS 0000 file #6
.HS 0000 file #7
.HS 0000 file #8
* table of interrupt vectors. these can only be changed
* by the mli call allocate_interrupt. values of the registers
@ -84,65 +84,66 @@ buftbl .EQ *-ofsG
* with the address interrupted.
inttbl .EQ *-ofsG interrupt table
.DA #0000' int #1
dc h'0000' int #2
dc h'0000' int #3
dc h'0000' int #4
.HS 0000 int #1
.HS 0000 int #2
.HS 0000 int #3
.HS 0000 int #4
p8areg .EQ *-ofsG A register savearea
.DA #00'
.DA #0
p8xreg .EQ *-ofsG X register savearea
dc h'00'
.DA #0
p8yreg .EQ *-ofsG Y register savearea
dc h'00'
.DA #0
p8sreg .EQ *-ofsG S register savearea
dc h'00'
.DA #0
p8preg .EQ *-ofsG P register savearea
dc h'00'
.DA #0
bankid .EQ *-ofsG bank ID byte (ROM/RAM)
dc h'01'
.DA #1
intadr .EQ *-ofsG interrupt return address
dc h'0000'
.HS 0000
p8date .EQ *-ofsG bits 15-9=yr, 8-5=mo, 4-0=day
dc h'0000'
.HS 0000
p8time .EQ *-ofsG bits 12-8=hr, 5-0=min, low-hi format
dc h'0000'
.HS 0000
flevel .EQ *-ofsG current file level
dc h'00'
.DA #0
bubit .EQ *-ofsG backup bit disable, setfileinfo only
dc h'00'
.DA #0
spare1 .EQ *-ofsG used to save acc
dc h'00'
.DA #0
newpfxptr .EQ *-ofsG appletalk alternate prefix ptr
dc h'00'
.DA #0
machid .EQ *-ofsG machine ID byte
dc h'00'
.DA #0
rommap .EQ *-ofsG slot ROM bit map
dc h'00'
.DA #0
preflag .EQ *-ofsG prefix active flag
dc h'00'
.DA #0
mliact .EQ *-ofsG MLI active flag
dc h'00'
.DA #0
mliretn .EQ *-ofsG last MLI call return address
dc h'0000'
.DA 0
mlix .EQ *-ofsG MLI X register savearea
dc h'00'
.DA #0
mliy .EQ *-ofsG MLI Y register savearea
dc h'00'
.DA #0
* language card bank switching routines which must reside at $BFA0 because
* workstation software patches this area
HBFA0 .EQ *-ofsG
eor $E000 test for rom enable
beq L2EAA taken if ram enabled
beq .1 taken if ram enabled
sta romin read ROM
bne L2EB5 always
L2EAA lda bnkbyt2 for alternate ram
bne .2 always
.1 lda bnkbyt2 for alternate ram
eor $D000 test
beq L2EB5 branch if not alternate ram
beq .2 branch if not alternate ram
lda altram else enable alt $D000
L2EB5 pla return code
.2 pla return code
rti re-enable interrupts and return
mlicont .EQ *-ofsG
sec
ror mliact notify interrupt routines MLI active.
@ -153,36 +154,43 @@ mlicont .EQ *-ofsG
lda ramin force ram card on
lda ramin with write allowed
jmp xdosmli
irqexit .EQ *-ofsG
lda bankid determine state of ram card (ROM/RAM)
irqxit0 .EQ *-ofsG
beq L2EE2 branch if ram card enabled.
bmi L2EDF branch if alternate $D000 enabled.
lsr a determine if no ram card present.
bcc L2EE7 branch if rom only system.
beq .2 branch if ram card enabled.
bmi .1 branch if alternate $D000 enabled.
lsr determine if no ram card present.
bcc .3 branch if rom only system.
lda romin1 enable rom
bcs L2EE7 always taken
L2EDF lda altram enable alternate $D000
L2EE2 lda #$01 preset bankid for rom.
bcs .3 always taken
.1 lda altram enable alternate $D000
.2 lda #$01 preset bankid for rom.
sta bankid (reset if ram card interrupt)
L2EE7 lda p8areg restore acc
.3 lda p8areg restore acc
rti exit
irqent .EQ *-ofsG this entry only used when rom
bit ramin was enabled at time of interrupt.
bit ramin
jmp irqrecev
bnkbyt1 .EQ *-ofsG
dc h'00'
.DA #0
bnkbyt2 .EQ *-ofsG
dc h'00'
dc h'00000000' pad to before $BFFA
dc h'04' gsos compatibility byte ($BFFA)
.DA #00' pad
dc h'00' reserved
dc h'00' version # of running interpreter
dc h'00' preserved for System Utilities
.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
dc h'23' represents release 2.0.3
.HS 23 represents release 2.0.3
* end of obj mli_1
*--------------------------------------

View File

@ -22,15 +22,15 @@ H2D9B pha $2D9B-2DFF moved to $FF9B-FFFF
lda #$FF
sysactv sta bankid
sta afbank
lda #>aftirq setup return address
lda /aftirq setup return address
pha
lda #<aftirq
lda #aftirq
pha
lda #$04 status reg with interrupt flag set
pha
H2DC2 lda #>romirq setup ROM re-entry
H2DC2 lda /romirq setup ROM re-entry
pha
lda #<romirq
lda #romirq
pha
gorom .EQ *-ofsR2
sta romin hits ROM rts at $FFCB
@ -44,7 +44,7 @@ lreset .EQ *-ofsR2
pha
jmp gorom
rreset .EQ *-ofsR2
dc I2'resetv-1' rts to resetv
.DA resetv-1 rts to resetv
fix45 .EQ *-ofsR2
sta p8areg A register savearea
lda oldacc
@ -64,10 +64,10 @@ stapfx .EQ *-ofsR2
* these 3 vectors hard-coded into processor
.DA nmivect' nmi handler
.DA lreset' reset handler
.DA nmivect nmi handler
.DA lreset reset handler
irqv .EQ *-ofsR2
dc i2'lanirq' irq handler
.DA lanirq irq handler
* end of obj mli_3
*--------------------------------------

View File

@ -421,7 +421,7 @@ H2367 .DA #$01' relocation table. 1=move src to ZP.Ds
.DA MLI' globals
.DA $0100' in one page
.DA H2E00'
.DA #00' 0=clear buffers $D700-$DDFF
.HS 00 0=clear buffers $D700-$DDFF
.DA pathbuf
.DA xdosorg-pathbuf'
.DA #$01'
@ -444,7 +444,7 @@ rlclk64 .DA #$01' relocation table. 1=move src to ZP.Ds
.DA tclk_in'
.DA H2F69-tclock_0'
.DA tclk_in'
.DA #00'
.HS 00
dc h'C1C1'
clock64 .DA #$00'
.DA #FF' done
@ -507,16 +507,16 @@ H23F0 .DA #$1A length of message
gfi_list .EQ *-ofsL
.DA #0A'
dc i2'atinitname'
dc h'00'
.DA atinitname'
.HS 00
gfi_type .EQ *-ofsL
dc h'00000000'
.DA #0000000000000000'
.DA #0000'
.HS 0000
atopen .EQ *-ofsL parms to open 'atinit'
dc h'03'
dc i2'atinitname'
dc i2'iobuf' i/o buffer
.DA atinitname'
.DA iobuf' i/o buffer
dc h'01' ref# hard coded since no other files
atinitname .EQ *-ofsL
.DA #06' length of name
@ -616,7 +616,7 @@ H24C8 jsr MLI close interpreter file
H24DF lda romin enable ROM
jmp sysentry go run interpreter
cflag .EQ *-ofsL
.DA #00' set if a //c.
.HS 00 set if a //c.
nointrp .EQ *-ofsL no interpreter found,
jsr MLI so quit.
.DA #$65'
@ -646,11 +646,11 @@ iomess .EQ *-ofsL
dc c'** Unable to load'
dc c' X.System *********'
ierlen .EQ *-ofsL
.DA #00'
.HS 00
opparm .EQ *-ofsL parms for open call
dc h'03'
dc i2'PrefixBuf'
dc i2'iobuf'
.DA PrefixBuf'
.DA iobuf'
dc h'01'
efparm .EQ *-ofsL parms for get eof call
dc h'02'
@ -660,19 +660,19 @@ eof .EQ *-ofsL
rdparm .EQ *-ofsL parms for read call
dc h'04'
dc h'01'
dc i2'sysentry'
.DA sysentry'
rdlen .EQ *-ofsL
.DA #0000'
dc h'0000'
.HS 0000
.HS 0000
clparm .EQ *-ofsL parms for close call
dc h'01'
dc h'00'
.HS 00
quitparm .EQ *-ofsL parms for quit call
dc h'04'
dc h'00'
.DA #0000'
dc h'00'
dc h'0000'
.HS 00
.HS 0000
.HS 00
.HS 0000
iterp .EQ *-ofsL interpreter suffix that is required
dc c'.SYSTEM'
@ -1140,11 +1140,11 @@ pscall jsr $0000 self modifying code
* and report true # of devices attached
jsr spvect status of Cocoon
.DA #00'
.HS 00
.DA spcparms' ignore any errors.
H28B1 stz statunit set unit# = 0
jsr spvect call to get the device count.
.DA #00' this is a status call
.HS 00 this is a status call
.DA spcparms'
lda numdev2
beq donesp no devices, so done.
@ -1235,7 +1235,7 @@ H291F jsr H29EB is there a smartport device here?
jsr H28E8 set up device attributes
stz statunit
jsr spvect do a status call on smartport itself
.DA #00'
.HS 00
.DA spcparms'
lda numdev2 # of devices on smartport
cmp #$03
@ -1256,7 +1256,7 @@ H295B cmp driveradr have we done all units in this slot?
bcs H2974 yes, skip to next slot.
sta statunit store the unit#.
jsr spvect do status call
.DA #00'
.HS 00
.DA spcparms'
lda numdev2 is this a block device?
bmi mount yes, so mount it.
@ -1585,20 +1585,20 @@ H2B89 and #$03
* relocation table contains length of each opcode in 2-bit groups
opcodln .DA #0928193C0A280D3C'
.DA #0B2A193F0A280D3C'
.DA #0928193F0A280D3C'
.DA #0928193F0A280D3C'
.DA #082A113F0A2A1D0C'
.DA #2A2A193F0A2A1D3F'
.DA #0A2A193F0A280D3C'
.DA #0A2A193F0A280D3C'
opcodln .HS 0928193C0A280D3C
.HS 0B2A193F0A280D3C
.HS 0928193F0A280D3C
.HS 0928193F0A280D3C
.HS 082A113F0A2A1D0C
.HS 2A2A193F0A2A1D3F
.HS 0A2A193F0A280D3C
.HS 0A2A193F0A280D3C
wsize .DA #$00'
sgcnt .DA #$00'
limlo .DA #0000000000000000'
limhi .DA #0000000000000000'
ofset .DA #0000000000000000'
wsize .HS 00
sgcnt .HS 00
limlo .HS 0000000000000000
limhi .HS 0000000000000000
ofset .HS 0000000000000000
* patch to gsos vectors so error is returned for os calls - rev note #101

View File

@ -33,9 +33,9 @@ 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 #ramdest card entry point
sta passit
lda #>ramdest
lda /ramdest
gocard .EQ *-ofsR2 also used by 'mainwrt'
sta passit+1
sec direction ram -> card
@ -74,18 +74,18 @@ H2D6A lda (A1L),y pointers set in card by 'setptr'
dey
bne H2D6A
sta wrmainram write to main 48K.
lda #<donewrt done writing card
lda #donewrt done writing card
sta passit
lda #>donewrt
lda /donewrt
jmp gocard
sp1 .EQ *-ofsR2
.DA #0000'
.HS 0000
a1l1 .EQ *-ofsR2 13 bytes of storage
* end of obj ram_2
r2_end .EQ *
ds $D9B-(r2_end-H2000) fill to lanirq ($FF9B see note below)
.BS $D9B-(r2_end-H2000) fill to lanirq ($FF9B see note below)
*--------------------------------------
MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM

View File

@ -227,7 +227,7 @@ L525E cmp #$11 if <=17 then done
sbc #$11 else block=block-17.
inx iteration count.
bpl L525E should branch always
.DA #00' otherwise crash !!!
.HS 00 otherwise crash !!!
L5268 tay remainder in y
* if remainder is 1 then it's an index block:
@ -288,32 +288,31 @@ L52B1 lda (A4L),y (pointer set by setptr)
jmp exitcard
formatflg .EQ *-ofsR0
.DA #00' not formatted yet
.HS 00 not formatted yet
tcmd .EQ *-ofsR0
dc h'00' command
dc h'00' unit (not used)
.HS 00 command
.HS 00 unit (not used)
R2L .EQ *-ofsR0
dc h'00' R2 = user buffer
.HS 00 R2 = user buffer
R2H .EQ *-ofsR0
dc h'00'
.HS 00
R01 .EQ *-ofsR0
dc h'00' page requested
.HS 00 page requested
BITMAP .EQ *-ofsR0
dc h'00FFFFFF' blocks 0-7 used
.DA #FFFFFFFF'
dc h'FFFFFFFF'
.DA #FFFFFFFE'
.HS 00FFFFFF blocks 0-7 used
.HS FFFFFFFF
.HS FFFFFFFF
.HS FFFFFFFE
VDIR .EQ *-ofsR0 start of vdir.
dc h'F3' storage type = F, name length = 3
msb off
dc c'RAM'
.HS F3 storage type = F, name length = 3
.AS "RAM"
access .EQ *-ofsR0
.DA #C3' destroy, rename, read enabled
dc h'27' entry length
dc h'0D'
dc h'0000'
dc h'0300' block 3
dc h'7F' 128 blocks
.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 ramin restore language card
@ -323,11 +322,11 @@ exitcard .EQ *-ofsR0
sta store80on enable 80store
L52EA jmp bypass jump around passit
passit .EQ *-ofsR0
.DA #0000'
.HS 0000
bypass .EQ *-ofsR0
lda #<noerr set up return to noerr
lda #noerr set up return to noerr
sta passit
lda #>noerr
lda /noerr
ex1 .EQ *-ofsR0
sta passit+1 also used by blockwrite
clc transfer card to main
@ -338,7 +337,7 @@ ex1 .EQ *-ofsR0
* since the interrupt vector must go there if aux interrupts
* are to be used. no room for expansion here !!
.DA #0000' $3FE-$3FF
.HS 0000 $3FE-$3FF
* end of obj ram_0
*--------------------------------------

View File

@ -261,57 +261,57 @@ L5C0B jsr prntmsg
dsp1msgs .EQ *-ofsS
dsp1msg0 .EQ *-ofsS
dc c'ENTER PREFIX (PRESS "RETURN" TO ACCEPT)'
.DA #00'
.HS 00
disp1msg .EQ *-ofsS
dc c'ENTER PATHNAME OF NEXT APPLICATION'
.DA #00'
.HS 00
dsp1err1 .EQ *-ofsS
.DA #87'
dc c'NOT A TYPE "SYS" FILE'
.DA #00'
.HS 00
dsp1err2 .EQ *-ofsS
.DA #87'
dc c'I/O ERROR '
.DA #00'
.HS 00
dsp1err3 .EQ *-ofsS
.DA #87'
dc c'FILE/PATH NOT FOUND '
.DA #00'
.HS 00
dsp1info .EQ *-ofsS get file info parms
.DA #0A' 10 parameters
dc i2'PrefixBuf' pathname buffer
.DA PrefixBuf' pathname buffer
dsp1acess .EQ *-ofsS
dc h'00' access
.HS 00 access
dsp1type .EQ *-ofsS
dc h'00' file type
.HS 00 file type
ds 13 the rest are unimportant
dsp1open .EQ *-ofsS open file parms
dc h'03' 3 parameters for open
dc i2'PrefixBuf' pathname buffer
dc i2'fbuf' fcb buffer
.DA PrefixBuf' pathname buffer
.DA fbuf' fcb buffer
dsp1refn .EQ *-ofsS
dc h'00' reference #
.HS 00 reference #
dsp1cls .EQ *-ofsS close file parms
.DA #01' 1 parameter for close
dsp1cln .EQ *-ofsS
dc h'00' reference #
.HS 00 reference #
dsp1read .EQ *-ofsS
dc h'04' 4 parameters for read
dsp1rdn .EQ *-ofsS
dc h'00' reference #
dc i2'sysentry' .SYS load address
.HS 00 reference #
.DA sysentry' .SYS load address
dsp1cnt .EQ *-ofsS
dc h'0000' byte count
.DA #0000'
.HS 0000 byte count
.HS 0000
dsp1eof .EQ *-ofsS get eof parms
dc h'02' 2 parameters
dsp1eofn .EQ *-ofsS
dc h'00' reference #
.HS 00 reference #
dsp1eofb .EQ *-ofsS
dc h'000000' 3 byte eof
dsp1pfx .EQ *-ofsS get/set prefix parms
.DA #01' 1 parameter
dc i2'PrefixBuf' prefix buffer
.DA PrefixBuf' prefix buffer
disp1end .EQ *
ds $300-(disp1end-disp1obj) fill to page boundary

View File

@ -126,7 +126,7 @@ L5DD8 adc #$04 add 4 and put in
jsr MLI call mli
.DA #$CE' set mark
.DA #smparms' parameters address = $0060
dc h'00'
.HS 00
bcs L5DB3 error
jsr doread
bcs L5DB3 error.
@ -390,38 +390,38 @@ fldrmsg .EQ *-ofsB
dc c'XY' folder characters
dc h'18' disable mousetext
dc h'0E' normal control code
dc h'00'
.HS 00
op_parms .EQ *-ofsB open parameters
.DA #03' 3 parms
dc i2'PrefixBuf' pathname
dc i2'op_buf' file buffer
.DA PrefixBuf' pathname
.DA op_buf' file buffer
op_refn .EQ *-ofsB
dc h'00' reference number
.HS 00 reference number
cl_parms .EQ *-ofsB close parameters
dc h'01' 1 parm
dc h'00' reference number.
.HS 00 reference number.
ol_parms .EQ *-ofsB online parameters
dc h'02' 2 parms
ol_unit .EQ *-ofsB
dc h'60' unit number, default = s6, d1
dc i2'PrefixBuf+1' data buffer
.DA PrefixBuf+1' data buffer
pf_parms .EQ *-ofsB set prefix parameters
.DA #01' one parm
dc i2'PrefixBuf' pathname
.DA PrefixBuf' pathname
rd_parms .EQ *-ofsB read parameters
.DA #04' 4 parms
rd_refn .EQ *-ofsB
dc h'01' reference number
dc i2'sysentry' data buffer
.DA sysentry' data buffer
* these last 2 parms (4 bytes) may extend past $300 length limit since
* the request count is set prior to using the parm block and the transfer
* count isn't used at all (except by prodos)
* dc h'0000' requested length
* dc h'0000' actual length
* .HS 0000 requested length
* .HS 0000 actual length
dhdr_len .EQ *-ofsB directory header length
dc h'00' (actually uses 2 bytes)
.HS 00 (actually uses 2 bytes)
* end of obj sel_1
*--------------------------------------

View File

@ -13,15 +13,16 @@ NEW
* (as other replacement quit code is supposed to do) because GQuit checks
* this to see if this version of quit code is available.
.OP 65816
ofsQ .EQ GQdisp-dispadr offset to GQuit dispatcher org
msb off
GQdisp lda ramin read/write LC bank 1
clc
xce 16 bit native mode.
jmp >P8QUIT go to GQuit.
.DA #0000000000' offset to paragraph boundary.
dc c'GQ' id bytes so GQuit can identify this
.DA #0000000000 offset to paragraph boundary.
.AS "GQ" id bytes so GQuit can identify this
* load application
*
@ -58,8 +59,8 @@ GQdisp lda ramin read/write LC bank 1
* prefix is passed at $00/0200 by GQuit.
L6020 jsr MLI set prefix
.DA #$C6'
.DA pfxparms'
.DA #$C6
.DA pfxparms
bcc L602D if prefix ok.
jsr gqerror error handler.
bra L6020 try again
@ -76,8 +77,8 @@ L602D xce native mode (carry clear)
L603D sec back to emulation mode.
xce
L603F jsr MLI open the application file
.DA #$C8'
.DA opnparms'
.DA #$C8
.DA opnparms
bcc L604C if open ok.
jsr gqerror handle error.
bra L603F try again.
@ -89,8 +90,8 @@ L604C lda oprefnum copy ref number to parameter lists
* do a geteof call for how many bytes to read
L6058 jsr MLI get eof
.DA #$D1'
.DA eofparms'
.DA #$D1
.DA eofparms
bcc L6065 eof ok.
jsr gqerror handle error.
bra L6058 try again.
@ -102,14 +103,14 @@ L6065 lda eofval
lda eofval+1
sta rdcount+1
L6071 jsr MLI read
.DA #$CA'
.DA readparm'
.DA #$CA
.DA readparm
bcc L607E read ok
jsr gqerror
bra L6071
L607E jsr MLI close
.DA #$CC'
.DA closeprm'
.DA #$CC
.DA closeprm
bcc L608B close ok
jsr gqerror
bra L607E
@ -121,6 +122,7 @@ L608B jsr dolaunch check for possible 2nd pathname.
bra L60AB
L6099 lda romin enable ROM
jmp sysentry execute the system application
gqerror .EQ *-ofsQ
clc
xce 16 bit native mode
@ -157,8 +159,8 @@ L60AB clc native mode
sec emulation mode
xce
jsr MLI quit back to GQuit
.DA #$65'
.DA quitparms'
.DA #$65
.DA quitparms
* p8 mount volume
*
@ -180,6 +182,7 @@ mountvol .EQ *-ofsQ
beq L6101 yes
sec indicate error not handled.
rts return with error code still in acc.
L6101 pha save error code in case esc pressed.
phy pointer to volume name.
phx
@ -187,7 +190,7 @@ L6101 pha save error code in case esc pressed.
phd save D reg.
tcd point D reg at stack.
lda [$01] get length byte and leading separator.
dec a don't count leading separator.
dec don't count leading separator.
xba then swap the bytes so the volume name
sta [$01] doesn't cpntain the separator.
pha room for result.
@ -203,7 +206,7 @@ L6101 pha save error code in case esc pressed.
_TLTextMountVolume
lda [$01] restore first 2 bytes of vilume name
xba back to their original positions
inc a and values.
inc and values.
sta [$01]
pla which button: 1=Return 2=Escape.
pld restore D reg.
@ -346,8 +349,8 @@ L621B cmp inbuf,x
L6225 dex don't include trailing slash.
stx inbuf set new length.
jsr MLI set the P8 prefix.
.DA #$C6'
.DA pfxparms'
.DA #$C6
.DA pfxparms
lda #$00 set z-flag
L6231 rts and go launch the app.
@ -363,101 +366,101 @@ ckfordrv .EQ *-ofsQ
LONG I 16-bit regs, 8-bit acc.
ldx #sysentry+6 point to pathname buffer.
jsr copyvol copy volume name to pathname buffer.
L623C sec emulation mode.
.1 sec emulation mode.
xce
jsr MLI get info on the volume.
.DA #$C4'
.DA gfiparms'
bcc L6252 branch if volume found,
.DA #$C4
.DA gfiparms
bcc .2 branch if volume found,
clc (native mode)
xce
LONG I,M
jsr mountvol else ask user to mount the volume.
bcc L623C if <return> pressed, then try again.
bcc .1 if <return> pressed, then try again.
sec emulation mode.
xce
sec disk not found.
L6252 rts
.2 rts
* Prodos 8 parameter lists
pfxparms .EQ *-ofsQ set prefix parms.
.DA #01' one parm.
dc i2'inbuf' address of prefix.
.DA #01 one parm.
.DA inbuf address of prefix.
opnparms .EQ *-ofsQ open parms.
dc h'03' 3 parms.
dc i2'PrefixBuf' pathname
dc i2'op_buf' i/o buffer
.DA #3 3 parms.
.DA PrefixBuf pathname
.DA op_buf i/o buffer
oprefnum .EQ *-ofsQ
dc h'00' reference #
.HS 00 reference #
eofparms .EQ *-ofsQ
.DA #02' 2 parms
.DA #02 2 parms
eofrefn .EQ *-ofsQ
dc h'00' reference #
.HS 00 reference #
eofval .EQ *-ofsQ
dc h'000000' 3 byte eof value
.HS 000000 3 byte eof value
readparm .EQ *-ofsQ
.DA #04' 4 parms
.DA #04 4 parms
rdrefnum .EQ *-ofsQ
dc h'00' reference #
dc i2'sysentry' read into $2000 (bank 0).
.HS 00 reference #
.DA sysentry read into $2000 (bank 0).
rdcount .EQ *-ofsQ
dc h'0000' # of bytes to read.
dc h'0000' transfer count
.HS 0000 # of bytes to read.
.HS 0000 transfer count
closeprm .EQ *-ofsQ
dc h'01' 1 parm
.DA #1 1 parm
closeref .EQ *-ofsQ
dc h'00' reference #
.HS 00 reference #
quitparms .EQ *-ofsQ
.DA #04' 4 parms.
dc h'00' quit back to launcher (GQuit)
dc h'0000'
dc h'00'
dc h'0000'
.DA #04 4 parms.
.HS 00 quit back to launcher (GQuit)
.HS 0000
.HS 00
.HS 0000
gfiparms .EQ *-ofsQ get file info parms.
.DA #0A' 10 parms
dc i2'volbuf' volume buffer
dc h'00' access
dc h'00' file type
dc h'0000' aux type
dc h'00' storage type
dc h'0000' blocks used
.DA #0000' modification date
dc h'0000' modification time
dc h'0000' creation date
.DA #0000' creation time
.DA #$0A 10 parms
.DA volbuf volume buffer
.DA #0 access
.DA #0 file type
.DA 0 aux type
.DA #0 storage type
.DA 0 blocks used
.DA 0 modification date
.DA 0 modification time
.DA 0 creation date
.DA 0 creation time
* messages for P8 fatal error. maximum length of message is 35 characters.
* the error code will be displayed immediately after the final character.
quitstr1 .EQ *-ofsQ
dc h'1B'
dc c'Can''t run next application.'
.DA #$1B
.AS "Can't run next application."
quitstr2 .EQ *-ofsQ
dc h'14'
dc c'ProDOS Error = $'
.DA #$14
.AS "ProDOS Error = $"
errval .EQ *-ofsQ hex error code gets stored here
dc c' '
.AS " "
quitbtn2 .EQ *-ofsQ null string (no 2nd button)
dc h'00'
.HS 00
* messages for P8 mount volume. maximum length of message is 35 characters.
* the button labels must not be more than 16 characters.
mountmsg .EQ *-ofsQ
dc h'17'
dc c'Please insert the disk:'
.DA #$17
.AS "Please insert the disk:"
button1 .EQ *-ofsQ
dc h'0D'
dc c'Accept: '
.DA #1B' mousetext on
dc h'0F' inverse on
dc h'4D' mousetext return
dc h'0E' normal on
dc h'18' mousetext off
.DA #$0D
.AS "Accept: "
.DA #$1B mousetext on
.DA #$0F inverse on
.DA #$4D mousetext return
.DA #$0E normal on
.DA #$18 mousetext off
button2 .EQ *-ofsQ
dc h'0B'
dc c'Cancel: Esc'
.DA #$0B
.AS "Cancel: Esc"
* end of obj sel_2 (must be < GQdisp+$300)
*--------------------------------------

View File

@ -18,13 +18,13 @@ clkslt .EQ *-ofsT+2 points to $C1.
clc and time into input buffer.
ldx #$04 index for 5 values.
ldy #$0C read minutes 1st, month last.
H2F14 lda inbuf,y convert values to binary.
.1 lda inbuf,y convert values to binary.
and #$07 no value > 5 decimal.
sta pcl 'tens' place value
asl a multiply by 10
asl a
asl multiply by 10
asl
adc pcl
asl a
asl
adc inbuf+1,y add to ascii 'ones' place
sec and subtract out the ascii
sbc #$B0
@ -33,30 +33,30 @@ H2F14 lda inbuf,y convert values to binary.
dey
dey
dex are there more values?
bpl H2F14 if yes.
bpl .1 if yes.
tay contains month
lsr a
ror a
ror a
ror a high bit of month held in carry
lsr
ror
ror
ror high bit of month held in carry
ora A1L
sta p8date save low value of date.
php save high bit of month.
and #$1F isolate day.
adc tdays-1,y (y = month)
bcc H2F42 branch if not Sept 13 thru 30th
bcc .2 branch if not Sept 13 thru 30th
adc #$03 adj for mod 7 when day > 256
H2F42 sec
H2F43 sbc #$07
bcs H2F43 loop until < 0.
.2 sec
.3 sbc #$07
bcs .3 loop until < 0.
adc #$07 make it in the range of 0-6.
sbc pch the delta provides years offset.
bcs H2F4F branch if positive
bcs .4 branch if positive
adc #$07 else make it positive again.
H2F4F tay
.4 tay
lda yradj,y look up year
plp and combine it with hi bit of month
rol a
rol
sta p8date+1 P8 date
lda A1L+1 hour
sta p8time+1 P8 time
@ -71,18 +71,18 @@ H2F69 rts
* one entry for each month. the values are modulo 256.
tdays .EQ *-ofsT
.DA #00' January
dc h'1F' February
dc h'3B' March
dc h'5A' April
dc h'78' May
dc h'97' June
dc h'B5' July
dc h'D3' August
.DA #F2' September
dc h'14' October (MOD 256)
dc h'33' November
dc h'51' December
.DA #$00 January
.DA #$1F February
.DA #$3B March
.DA #$5A April
.DA #$78 May
.DA #$97 June
.DA #$B5 July
.DA #$D3 August
.DA #$F2 September
.DA #$14 October (MOD 256)
.DA #$33 November
.DA #$51 December
* the following table is used to look up the current year, based on
* the current month, day and day of week. The 1st entry corresponds
@ -91,15 +91,15 @@ tdays .EQ *-ofsT
* the days of the week.
yradj .EQ *-ofsT
dc h'60' Monday
dc h'5F' Sunday
dc h'5E' Saturday
dc h'5D' Friday
.DA #62' Thursday
dc h'61' Wednesday
dc h'60' Tuesday
.DA #$60 Monday
.DA #$5F Sunday
.DA #$5E Saturday
.DA #$5D Friday
.DA #$62 Thursday
.DA #$61 Wednesday
.DA #$60 Tuesday
tclk_end .EQ * end of obj tclock_0.
dc h'000000' pad
.HS 000000 pad
*--------------------------------------
MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.TCLK

View File

@ -263,9 +263,9 @@ irqdev .EQ *-ofsX
sta mslot slot being accessed.
H31DD jmp irqexit do necessary bank switches and return.
irqflag .EQ *-ofsX
.DA #00' 0 = old roms. 1 = new roms.
.HS 00 0 = old roms. 1 = new roms.
irqcount .EQ *-ofsX
dc h'00' # of unclaimed interrupts.
.HS 00 # of unclaimed interrupts.
svstack .EQ *-ofsX temporary save area from stack
dc h'0000000000000000'
.DA #0000000000000000'
@ -4022,8 +4022,8 @@ L4F3F lda buf-1,x from prodos parameters
sp_vector .EQ *-ofsX smartport call
jsr $0000 (entry address gets modified)
cmdnum .EQ *-ofsX
dc h'00' command #
dc i2'statparms'
.HS 00 command #
.DA statparms'
bcs L4F6E
ldx cmdnum status call ?
bne L4F6E no...
@ -4049,9 +4049,9 @@ spvecthi .EQ *-ofsX storage for high byte of smartport
statparms .EQ *-ofsX # of parms (always 3 except format)
dc h'03'
sp_unitnum .EQ *-ofsX
.DA #00' unit number
.HS 00 unit number
sp_bufptr .EQ *-ofsX
dc h'0000' data buffer
.HS 0000 data buffer
dc h'000000' block number (3 bytes)
* data tables
@ -4072,26 +4072,26 @@ pcntbl .EQ *-ofsX parameter counts for the calls
* command table
cmdtable .EQ *-ofsX
dc i2'create' create
dc i2'destroy' destroy
.DA create' create
.DA destroy' destroy
.DA rename' rename
dc i2'setinfo' setinfo
dc i2'getinfo' getinfo
dc i2'online' online
.DA setinfo' setinfo
.DA getinfo' getinfo
.DA online' online
.DA setprefx' set prefix
dc i2'getprefx' get prefix
dc i2'openf' open
dc i2'newline' newline
.DA getprefx' get prefix
.DA openf' open
.DA newline' newline
.DA readf' read
dc i2'writef' write
dc i2'closef' close
dc i2'flushf' flush
.DA writef' write
.DA closef' close
.DA flushf' flush
.DA setmark' set mark
dc i2'getmark' get mark
dc i2'seteof' seteof
dc i2'geteof' geteof
.DA getmark' get mark
.DA seteof' seteof
.DA geteof' geteof
.DA setbuf' setbuf
dc i2'getbuf' getbuf
.DA getbuf' getbuf
* corresponding command function bytes
@ -4109,7 +4109,7 @@ pass .EQ *-ofsX
xdosver .EQ *-ofsX
dc h'00'
compat .EQ *-ofsX
dc h'00'
.HS 00
dc h'C3270D000000'
rootstuf .EQ *-ofsX
.DA #0F02000400000800'
@ -4132,63 +4132,63 @@ deathmsg .EQ *-ofsX
* variables in the file control block and temporary directory.
own_blk .EQ *-ofsX
.DA #0000'
.HS 0000
own_ent .EQ *-ofsX
dc h'00'
.HS 00
own_len .EQ *-ofsX
dc h'00'
.HS 00
h_credt .EQ *-ofsX
dc h'0000' directory creation date
dc h'0000' directory creation time
.DA #00' version under which this dir created
dc h'00' earliest version that it's compatible
.HS 0000 directory creation date
.HS 0000 directory creation time
.HS 00 version under which this dir created
.HS 00 earliest version that it's compatible
h_attr .EQ *-ofsX attributes (protect bit, etc.)
dc h'00'
.HS 00
h_entln .EQ *-ofsX length of each entry in this directory
dc h'00'
.HS 00
h_maxent .EQ *-ofsX maximum number of entries per block
dc h'00'
.HS 00
h_fcnt .EQ *-ofsX current # of files in this directory
dc h'0000'
.HS 0000
h_bmap .EQ *-ofsX address of first allocation bitmap
.DA #0000'
.HS 0000
h_tblk .EQ *-ofsX total number of blocks on this unit
dc h'0000'
.HS 0000
d_dev .EQ *-ofsX device number of this directory entry
dc h'00'
.HS 00
d_head .EQ *-ofsX address of <sub> directory header
dc h'0000'
.HS 0000
d_entblk .EQ *-ofsX address of block which contains entry
dc h'0000'
.HS 0000
d_entnum .EQ *-ofsX entry number within block
.DA #00'
.HS 00
d_stor .EQ *-ofsX
dc h'0000000000000000' file name
dc h'0000000000000000'
d_filid .EQ *-ofsX user's identification byte
.DA #00'
.HS 00
d_frst .EQ *-ofsX first block of file
dc h'0000'
.HS 0000
d_usage .EQ *-ofsX # of blocks allocated to this file
dc h'0000'
.HS 0000
d_eof .EQ *-ofsX current end of file marker
dc h'000000'
d_credt .EQ *-ofsX
.DA #0000' file creation date
dc h'0000' file creation time
.HS 0000 file creation date
.HS 0000 file creation time
d_sosver .EQ *-ofsX sos version that created this file
dc h'00'
.HS 00
d_comp .EQ *-ofsX backward version compatibility
dc h'00'
.HS 00
d_attr .EQ *-ofsX attributes (protect, r/w, enable, etc.)
dc h'00'
.HS 00
d_auxid .EQ *-ofsX user auxilliary identification
.DA #0000'
.HS 0000
d_moddt .EQ *-ofsX
dc h'0000' file's last modification date
dc h'0000' file's last modification time
.HS 0000 file's last modification date
.HS 0000 file's last modification time
d_dhdr .EQ *-ofsX file directory header block address
dc h'0000'
.HS 0000
scrtch .EQ *-ofsX scratch area for
.DA #00000000' allocation address conversion.
oldeof .EQ *-ofsX temp used in r/w
@ -4196,142 +4196,142 @@ oldeof .EQ *-ofsX temp used in r/w
oldmark .EQ *-ofsX
.DA #000000'
xvcbptr .EQ *-ofsX used in 'cmpvcb' as a temp
dc h'00'
.HS 00
vcbptr .EQ *-ofsX
dc h'00'
.HS 00
fcbptr .EQ *-ofsX
dc h'00'
.HS 00
fcbflg .EQ *-ofsX
dc h'00'
.HS 00
reql .EQ *-ofsX
dc h'00'
.HS 00
reqh .EQ *-ofsX
dc h'00'
.HS 00
levels .EQ *-ofsX
.DA #00'
.HS 00
totent .EQ *-ofsX
dc h'00'
.HS 00
entcntl .EQ *-ofsX
dc h'00'
.HS 00
entcnth .EQ *-ofsX
dc h'00'
.HS 00
cntent .EQ *-ofsX
dc h'00'
.HS 00
nofree .EQ *-ofsX
dc h'00'
.HS 00
bmcnt .EQ *-ofsX
dc h'00'
.HS 00
saptr .EQ *-ofsX
dc h'00'
.HS 00
pathcnt .EQ *-ofsX
.DA #00'
.HS 00
p_dev .EQ *-ofsX
dc h'00'
.HS 00
p_blok .EQ *-ofsX
dc h'0000'
.HS 0000
bmptr .EQ *-ofsX
dc h'00'
.HS 00
basval .EQ *-ofsX
dc h'00'
.HS 00
half .EQ *-ofsX
dc h'00'
.HS 00
* bitmap info tables
bmastat .EQ *-ofsX
dc h'00'
.HS 00
bmadev .EQ *-ofsX
.DA #00'
.HS 00
bmadadr .EQ *-ofsX
dc h'0000'
.HS 0000
bmacmap .EQ *-ofsX
dc h'00'
.HS 00
tposll .EQ *-ofsX
dc h'00'
.HS 00
tposlh .EQ *-ofsX
dc h'00'
.HS 00
tposhi .EQ *-ofsX
dc h'00'
.HS 00
rwreql .EQ *-ofsX
dc h'00'
.HS 00
rwreqh .EQ *-ofsX
.DA #00'
.HS 00
nlchar .EQ *-ofsX
dc h'00'
.HS 00
nlmask .EQ *-ofsX
dc h'00'
.HS 00
ioaccess .EQ *-ofsX has a call been made to
dc h'00' disk device handler ?
.HS 00 disk device handler ?
cmdtemp .EQ *-ofsX
dc h'00'
.HS 00
bkbitflg .EQ *-ofsX used to set or clear backup bit
dc h'00'
.HS 00
duplflag .EQ *-ofsX
dc h'00'
.HS 00
vcbentry .EQ *-ofsX
dc h'00'
.HS 00
* xdos temporary variables
namcnt .EQ *-ofsX
.DA #00'
.HS 00
rnptr .EQ *-ofsX
dc h'00'
.HS 00
namptr .EQ *-ofsX
dc h'00'
.HS 00
vnptr .EQ *-ofsX
dc h'00'
.HS 00
prfxflg .EQ *-ofsX
dc h'00'
.HS 00
cferr .EQ *-ofsX
dc h'00'
.HS 00
* deallocation temporary variables
firstbl .EQ *-ofsX
dc h'00'
.HS 00
firstbh .EQ *-ofsX
dc h'00'
.HS 00
stortyp .EQ *-ofsX
.DA #00'
.HS 00
deblock .EQ *-ofsX
dc h'0000'
.HS 0000
dtree .EQ *-ofsX
dc h'00'
.HS 00
dsap .EQ *-ofsX
dc h'00'
.HS 00
dseed .EQ *-ofsX
dc h'0000'
.HS 0000
topdest .EQ *-ofsX
dc h'00'
.HS 00
dtmpx .EQ *-ofsX
dc h'00'
.HS 00
loklst .EQ *-ofsX look list of recognized device numbers
dealbufl .EQ *-ofsX
dc h'0000000000000000'
.HS 0000000000000000
dealbufh .EQ *-ofsX
.DA #0000000000000000'
.HS 0000000000000000
cbytes .EQ *-ofsX
.DA #0000'
dc h'00' cbytes+2 must = 0
.HS 0000
.HS 00 cbytes+2 must = 0
bufaddrl .EQ *-ofsX
dc h'00'
.HS 00
bufaddrh .EQ *-ofsX
dc h'00'
.HS 00
goadr .EQ *-ofsX
dc h'0000'
.HS 0000
delflag .EQ *-ofsX used by 'detree' to know if called
.DA #00' from delete (destroy).
.HS 00 from delete (destroy).
* zero fill to page boundary - 3 ($FEFD). so that cortland flag stays
* within page boundary.
dc h'00000000000000'
dc h'0000000000'
.HS 00000000000000
.HS 0000000000
dc i2'calldisp'
.DA calldisp
cortflag .EQ *-ofsX cortland flag. 1 = Cortland system
dc h'00' (must stay within page boundary)
.HS 00 (must stay within page boundary)
* end of obj mli_2
*--------------------------------------

View File

@ -1,225 +0,0 @@
KEEP PRODOS
MCOPY PRODOS.MAC
* disassembly of prodos version 2.0.3
* can be compiled with the orca/m assembler
* which produces an output file PRODOS (type = EXE)
* address refs beginning with 'L' were generated by orca disassembler
* address refs beginning with 'H' were added manually
* last edit: 01/24/13
* map of the object modules within prodos exe are as follows:
* $2000 mli_0 mli loader/relocator
* $2C80 ram_1 installer for /RAM
* $2D00 ram_2 /RAM driver in main lc
* $2D9B mli_3 interrupts
* $2E00 mli_1 global page
* $2F00 tclock_0 Thunderclock driver
* $2F80 cclock_0 Cortland clock driver
* $3000 mli_2 xdos mli & block file manager
* $5100 ram_0 /RAM driver in aux mem
* $5300 xrw_0 disk core routines
* $5A00 sel_0 dispatcher
* $5D00 sel_1 enhanced quit code (Bird's Better Bye)
* $6000 sel_2 GQuit dispatcher support
************************ IMPORTANT ************************
* *
* 1. In the language card area, the $D000 areas overlay. To *
* determine which bank is active requires that the main bank *
* has a CLD ($D8) at $D000 and the alternate bank does not. *
* $D000 in ROM = $6F, LC bank1 = $D8, LC bank2 = $EE *
* *
* 2. Location $E000 is used to determine the state of ROM vs. *
* language card. Therefore, the value of $E000 in the MLI *
* and ROM must differ. *
* *
* 3. In the section MEMMGR, the routine CALLDISP must access *
* the other $D000 bank so it MUST reside ABOVE $E000 in the *
* language card area. *
* *
* 4. The Disk II routine xrwtot MUST reside on a page boundary *
* to distinguish it from a ram-based driver. *
* *
* 5. In the /RAM driver ram3, the byte at $FF58 MUST be an rts *
* ($60) so the routine JSR $FF58 to determine an I/O card's *
* slot still works when the language card is switched in. *
* *
*****************************************************************
PRODOS START
* Predefined labels:
lookptr equ $0A
idapple equ $0C model machine id
idxl equ $10 general use 16 bit index pointer
devid equ $12
src equ $12
dst equ $14
cnt equ $16
cde equ $18
ecde equ $1A
wndlft equ $20
wndwdth equ $21
wndtop equ $22
wndbtm equ $23
ch equ $24 cursor horizontal
cv equ $25 cursor vertical
invflg equ $32 inverse flag
pcl equ $3A
pch equ $3B
A1L equ $3C
A1H equ $3D
A2L equ $3E
A2H equ $3F
A3L equ $40
A4L equ $42
unitnum equ $43
buf equ $44 2-byte data buffer pointer which
accsav equ $45 overlaps accsav (temp acc save byte)
bloknml equ $46 used mostly as 16 bit block # pointer
zpt equ $48 highly used zero page index pointer
datptr equ $4A ptr to data area of buffer.
sos equ $4C sos buffer pointer.
usrbuf equ $4E data ptr in user buffer.
* zero page variables for Bird's Better Bye
smparms equ $60 set mark parms
sm_refn equ $61 file reference number
fpos_lo equ $62 new file position (3 bytes)
fpos_mid equ $63
fpos_hi equ $64
lstpntr equ $65 device list pointer (16 bit)
valcnt equ $67 name counter
filecount equ $68 # of displayable files in directory
namelen equ $69 length of filename
gp_cnt equ $6A general purpose counter
dlevel equ $6B directory level
fnstore equ $6C filename storage pointer (16 bit)
entlen equ $6E directory entry length
entblk equ $6F directory entries/block
filecnt equ $70 directory file count (16 bit)
blkfl equ $72 block flag / file counter
topname equ $73 index # of top name in display
filetyps equ $74 128 byte table of filetypes
errnum equ $DE
tst128 equ $0080 temp page 0 routine for memory test
auxsp equ $0101
ramdest equ $0200 load address for aux bank /RAM driver
inbuf equ $0200 keyboard buffer
pbuf equ $0280 prefix buffer
p3vect equ $03F0 page 3 vectors (16 bytes)
softev equ $03F2 RESET vector
pwredup equ $03F4 power up byte
nmivect equ $03FB nmi handler
txtp2 equ $0400 test location for aux card
vline10 equ $04A8 line 10 of display
vmode equ $04FB video firmware operating mode
vline11 equ $0528 line 11 of display
clkmode equ $0538 clock mode
ch80col equ $057B 80 column ch position
vline12 equ $05A8 line 12 of display
vline5 equ $0600 line 5 of display
vline13 equ $0628 line 13 of display
vline14 equ $06A8 line 14 of display
vline23 equ $0750 line 23 of display
vline16 equ $07A8 line 16 of display
vline24 equ $07D0 line 24 of display
mslot equ $07F8 slot being accessed
lodintrp equ $0800
dbuf equ $0C00 8 page directory buffer
vblock1 equ $0E00 ramdisk directory block
volbuf equ $0F00 volume buffer
dispadr equ $1000 system death dispatcher run address
iobuf equ $1400 i/o buffer
fbuf equ $1800 FCB buffer
op_buf equ $1C00 open file buffer (selector)
sysentry equ $2000 .SYS file load address
prodos8 equ $BF00 prodos MLI and global page
kbd equ $C000 keyboard latch (read)
store80off equ $C000 disable 80-col store (write)
store80on equ $C001 enable 80-col store
rdmainram equ $C002 read from main 48K
rdcardram equ $C003 read from alt 48K
wrmainram equ $C004 write to main 48K
wrcardram equ $C005 write to alt 48K
setstdzp equ $C008 use main zero page/stack
setaltzp equ $C009 use alt zero page/stack
int3rom equ $C00A enable internal slot 3 ROM
slot3rom equ $C00B enable external slot 3 ROM
clr80vid equ $C00C disable 80 col hardware
clraltchar equ $C00E normal LC, flashing UC
kbdstrobe equ $C010 turn off keypressed flag
rd80col equ $C018 if 80-column store
newvideo equ $C029 video mode select
spkr equ $C030 click speaker
txtset equ $C051 switch in text
txtpage1 equ $C054 switch in text page 1
txtpage2 equ $C055 switch in text page 2
statereg equ $C068 memory state register
phaseoff equ $C080 disk port
romin1 equ $C081 read ROM/write RAM bank 2
romin equ $C082 read ROM
altram equ $C083 read/write RAM bank 2
motoroff equ $C088 disk port
motoron equ $C089 disk port
drv0en equ $C08A disk port
ramin equ $C08B read/write RAM bank 1
q6l equ $C08C disk port
q6h equ $C08D disk port
q7l equ $C08E disk port
q7h equ $C08F disk port
rdtcp equ $C108 Thunderclock read entry
wttcp equ $C10B Thunderclock write entry
init80 equ $C300 init 80 col card
slot3id1 equ $C305 slot 3 card id 1
slot3id2 equ $C307 slot 3 card id 2
slot3id3 equ $C30B slot 3 card id 3
ext80col equ $C30C slot 3 80 col id
auxmove equ $C311 move (3C)-(3E) to (42)
xfer equ $C314
slot3irq equ $C3FA slot 3 irq handler
clrrom equ $CFFF switch out $C8 ROMs
rwts equ $D000 disk ii driver in bank 1
displc2 equ $D100 system death routine stored in bank 2
pathbuf equ $D700 pathname buffer
tclk_in equ $D742 clock driver in bank 2
fcbbuf equ $D800 fcb buffer
vcbbuf equ $D900 vcb buffer
bmbuf equ $DA00 512 byte bitmap buffer
gbuf equ $DC00 general purpose 512 byte block buffer
xdosorg equ $DE00 xdos MLI in aux memory
romirq equ $FA41 monitor irq entry
breakv equ $FA59 monitor break vector
resetv equ $FA62 monitor reset entry
HFB1E equ $FB1E version check byte
init equ $FB2F init text screen
settxt equ $FB39 set text mode
tabv equ $FB5B set vertical position
setpwrc equ $FB6F create power-up byte
version equ $FBB3 monitor ROM id byte
zidbyte equ $FBC0 monitor ROM id byte
bell1 equ $FBDD generate bell tone
home equ $FC58 home cursor and clear screen
clreol equ $FC9C clear to end of line
rdkey equ $FD0C input char with cursor
crout equ $FD8E issue carriage return
cout equ $FDED output character
idroutine equ $FE1F returns system info
setinv equ $FE80 set inverse text mode
setnorm equ $FE84 set normal text mode
setkbd equ $FE89 reset input to keyboard
setvid equ $FE93 reset output to screen
lcdest equ $FF00 load address
bell equ $FF3A output bell (ctl-G)
oldrst equ $FF59 monitor reset entry
* romrts equ $FFCB an rts location that must be in ROM
P8QUIT equ $E0D000
GSOS equ $E100A8
GSOS2 equ $E100B0
OS_BOOT equ $E100BD indicates O/S initially booted