From 851f76d9e93cc0fd020419643c90320f139718fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 8 Nov 2019 17:11:49 +0100 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes ProDOS.FX/ProDOS.S.LDR.txt | 558 ++++++++++++++++++------------------- 2 files changed, 272 insertions(+), 286 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 002d085c28d376151221760a55ead52fdd653ebd..1628db94d08bcfc836be756ad3a71e2c47196e00 100644 GIT binary patch delta 11373 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 delta 8366 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 NpWrX$c6msd^nWqYszd+) diff --git a/ProDOS.FX/ProDOS.S.LDR.txt b/ProDOS.FX/ProDOS.S.LDR.txt index 40c049a1..9c1529bb 100644 --- a/ProDOS.FX/ProDOS.S.LDR.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -288,7 +288,7 @@ LDR.IIGS sta cortflag * running from gs/os shell so zero out os_boot for appletalk - stz OS_BOOT indicates O/S initially booted. + sta OS_BOOT indicates O/S initially booted. jsr patch101 patch for gs/os - rev note #101 .1 bra LDR.Common @@ -513,7 +513,11 @@ LDR.SetupCLK stx ZPInBufPtr LDR.SetupCLK.RTS rts *-------------------------------------- -LDR.SetupRAM jsr lc1in +LDR.SetupRAM lda GP.numdevs + cmp #13 + bcs LDR.SetupCLK.RTS + + jsr lc1in ldx PAKME.RAM ldy PAKME.RAM+1 @@ -542,9 +546,9 @@ LDR.SetupRAM jsr lc1in sta CLRWRITEAUX lda #RAMDRV put driver address into - sta drivertbl2+6 slot 3, drive 2. + sta DEVPTRS3D2 lda /RAMDRV - sta drivertbl2+7 + sta DEVPTRS3D2+1 inc GP.numdevs count (-1) active devices ldx GP.numdevs @@ -561,7 +565,10 @@ LDR.BlkDevScan stz idxl lda #$C7 search slots from high to low sta idxl+1 -.1 jsr cmpid + lda #7 + sta LDR.SlotIdx + +.1 jsr LDR.CheckDiskID bcs .8 if no ProDOS device in this slot. ldy #$ff @@ -572,115 +579,158 @@ LDR.BlkDevScan stz idxl lda #RWTS sta driveradr lda /RWTS + sta driveradr+1 sec 2 devices - jsr installdev - bra .8 + jsr LDR.AddBlkDevs + bra .7 .2 cmp #$FF if = $FF then 13 sector disk II. beq .8 ignore if 13 sector boot ROM ldy #$07 check for a smartport device. lda (idxl),y - bne .2 no smartport + bne .3 no smartport - jsr smartprt - bra .8 + jsr LDR.AddSPDevs + bra .7 -.2 ldy #$FE BLK device... +.3 ldy #$FE BLK device... lda (idxl),y get attributes. and #$03 verify it provides read and status calls. cmp #$03 bne .7 assume it's an off-brand disk - jsr setdevid set up the devid byte from attributes - clc - php remember that it's not a disk //. + lda (idxl),y get back ID byte + lsr + lsr + lsr + lsr + sta devid ->DEV LIST NIBBLE - lsr move # of units (0=1, 1=2) to carry. - lda idxl+1 store hi entry addr (low already done) + and #$3 Device count minus 1 + inc + ldx LDR.SlotIdx + sta LDR.DevCnt-1,x + tax + iny $CnFF + lda (idxl),y + sta driveradr + lda idxl+1 store hi entry addr (low already done) sta driveradr+1 - jsr installdev install 1 or 2 devices from this slot. + cpx #2 CS if 2 devs or more + jsr LDR.AddBlkDevs install 1 or 2 devices from this slot. -.7 lda idxl+1 mark a bit in slot byte - and #$07 to indicate rom present. - tax +.7 ldx LDR.SlotIdx lda sltbit,x tsb rommap mark bit to flag rom present .8 dec idxl+1 next lower slot. - lda idxl+1 - and #$07 have all slots been checked ? + dec LDR.SlotIdx have all slots been checked ? + bne .1 +*-------------------------------------- +LDR.AddExtraDevs + lda #7 + sta LDR.SlotIdx + +.1 ldx LDR.SlotIdx + lda LDR.DevCnt-1,x + cmp #3 + bcc .8 + + ldy LDR.DevType-1,x + bne .2 + + jsr LDR.AddExtraBlkDev + bra .8 + +.2 jsr LDR.AddExtraSPDevs + +.8 dec LDR.SlotIdx bne .1 -* perform the new device search, mapping unmounted smartport devices -* to empty slots in the device table. - - jsr newmount - -* now copy the disk // list to the end of the regular list. -* start by making the device count include disk //'s - - ldx GP.numdevs current device count - 1 - - clc - adc GP.numdevs sum of disk //'s and others. - sta GP.numdevs - inx move to open space in regular list. - ldy #$0D first disk // entry. - -H272F lda devlist,y - pha - lda devlist,x - sta devlist,y - pla - sta devlist,x - -H2747 ldy #$00 - ldx GP.numdevs now change the device order so that - -H274C lda devlist,x the boot device will have highest - pha priority. - and #$7F strip off high bit - eor devnum for comparison. - asl - bne H275A - pla - iny - -H275A dex - bpl H274C - - ldx GP.numdevs now reverse order of search, hi to lo. - tya was boot device found ? - beq H2777 - lda devnum make boot device 1st in search order. - sta devlist,x - dex - bmi H277E branch if only one device. - dey is this a 2 drive device ? - beq H2777 branch if not. - eor #$80 make boot device, drive 2 next. - sta devlist,x - dex - bmi H277E branch if only 1 device, 2 drives. - -H2777 pla - sta devlist,x - dex - bpl H2777 - -H277E rts - -stadrv ora devid combine with attributes. - ldx GP.numdevs - inx put device # into device list. - sta devlist,x - asl now form drive 2 device number, if any. rts *-------------------------------------- -installdev php how many drives (carry). +LDR.AddSPDevs jsr LDR.SetDevID setup the devid byte from attributes + + iny #$ff + lda (idxl),y + + sta driveradr + sta pscall+1 modify operand + clc + adc #$03 + sta spvect+1 + + lda idxl+1 + sta driveradr+1 + sta spvect+2 + sta pscall+2 modify operand + + asl convert $Cn to $n0 + asl + asl + asl + sta unitnum unit number + + stz A4L force a prodos status call + + stz buf dummy pointer + lda #$10 + sta buf+1 dummy pointer should be <> 0 + + stz bloknml # of bytes to transfer + stz bloknml+1 + +pscall jsr $0000 self modifying code + + ldy #$FB + lda (idxl),y check device id + and #$02 SCSI? + beq .1 no, no need to init Cocoon + + sta LDR.SPStatus.U device = 2 for SCSI + + jsr spvect status of Cocoon + .HS 00 + .DA LDR.SPStatus.P ignore any errors. + +.1 stz LDR.SPStatus.U set unit# = 0 + jsr spvect call to get the device count. + .HS 00 this is a status call + .DA LDR.SPStatus.P + + lda LDR.SPStatus.Buf + beq .8 no devices, so done. + + ldx LDR.SlotIdx + inc LDR.DevType-1,x set as smartport + +.2 inc LDR.SPStatus.U + + jsr spvect call to get the device status + .HS 00 this is a status call + .DA LDR.SPStatus.P + bcs .7 no more device + + lda LDR.SPStatus.Buf + bpl .2 not a block device + + ldx LDR.SlotIdx + inc LDR.DevCnt-1,x + bra .2 + +.7 ldx LDR.SlotIdx + lda LDR.DevCnt-1,x + beq .8 + + cmp #2 add 1 or 2 devs + jmp LDR.AddBlkDevs + +.8 rts +*-------------------------------------- +LDR.AddBlkDevs php how many drives (carry). lda idxl+1 get index to global device table and #$07 for this slot... asl @@ -689,7 +739,12 @@ installdev php how many drives (carry). asl asl now form device # = slot # asl in high nibble. - jsr stadrv OR in low nibble, store in dev list. + + ora devid combine with attributes. + ldx GP.numdevs + inx put device # into device list. + sta devlist,x + asl now form drive 2 device number, if any. plp restore # of devices in carry. ror if 2 drives, then bit 7=1. @@ -712,81 +767,122 @@ installdev php how many drives (carry). .3 rts *-------------------------------------- -* query smartport status to determine # of devices -* and install up to 4 units in table if card is in slot 5 -* otherwise only 2 units. this includes a patch #74 -*-------------------------------------- -smartprt jsr setdevid setup the devid byte from attributes - lda idxl+1 - sta driveradr+1 - lda driveradr - sta pscall+1 modify operand - clc - adc #$03 - sta spvect+1 - lda driveradr+1 - sta spvect+2 - sta pscall+2 modify operand - asl convert $Cn to $n0 - asl - asl - asl - sta unitnum unit number - stz A4L force a prodos status call - stz buf dummy pointer - stz bloknml # of bytes to transfer - stz bloknml+1 - lda #$10 - sta buf+1 dummy pointer should be <> 0 - -pscall jsr $0000 self modifying code - ldy #$FB - lda (idxl),y check device id - and #$02 SCSI? - beq .1 no, no need to init Cocoon - sta statunit device = 2 for SCSI - - jsr spvect status of Cocoon - .HS 00 - .DA spcparms ignore any errors. - -.1 stz statunit set unit# = 0 - jsr spvect call to get the device count. - .HS 00 this is a status call - .DA spcparms - - lda numdev2 - beq donesp no devices, so done. - cmp #$02 carry set if 2,3,4 - jsr installdev do the 1st and 2nd device if exists. - lda idxl+1 - cmp #$C5 - bne donesp if not slot 5 - - lda numdev2 - cmp #$03 carry set if 3,4,... - bcc donesp - - cmp #$04 carry set if 4,5,6,... - lda #$C2 map extra devices as slot 2 - sta idxl+1 - jsr installdev - - lda #$C5 - sta idxl+1 -donesp rts -*-------------------------------------- -setdevid ldy #$FE check attributes byte. - - lda (idxl),y - lsr move hi nibble to lo nibble for - lsr device table entries. - lsr - lsr - sta devid +LDR.AddExtraBlkDev rts *-------------------------------------- -cmpid lda CLRC8ROM switch out $C8 ROMs +LDR.AddExtraSPDevs + rts + + + ldy #$FF get smartport address. + lda (idxl),y + clc + adc #$03 add 3 for smartport call + sta spvect+1 + lda idxl+1 + sta spvect+2 + + jsr LDR.SetDevID set up device attributes + stz LDR.SPStatus.U + + jsr spvect do a status call on smartport itself + .HS 00 + .DA LDR.SPStatus.P + + lda LDR.SPStatus.Buf # of devices on smartport + cmp #$03 + bcc .8 only 2 devices,skip to next one. + inc add 1 for comparisons. + sta driveradr # of devices + 1. + +* find block devices on this smartport + +.1 cmp driveradr have we done all units in this slot? + bcs .8 yes, skip to next slot. + + sta LDR.SPStatus.U store the unit#. + jsr spvect do status call + .HS 00 + .DA LDR.SPStatus.P + lda LDR.SPStatus.Buf is this a block device? + bpl .2 + + + + + +.2 lda LDR.SPStatus.U go check the next unit# + inc + bra .1 + +.8 rts +*-------------------------------------- +LDR.FindFree dec Drive 0-1 + asl + asl + asl + tay + + ldx #$0C + +.1 ldy driveridx,x + lda drivertbl1,y device driver table 1 + cmp #nodevice + bne .2 + lda drivertbl1+1,y + cmp /nodevice + beq .8 + +.2 dex + bpl .1 + clc +.8 rts ran out of space for devices, exit. +*-------------------------------------- +LDR.MountSPDevs jsr lc1in write enable LC ram bank 1. + tya divide index by 2 + lsr + tax + + lda LDR.SPStatus.U + sta spunit-1,x store the smartport unit # + + lda spvect+1 and entry address. + sta spvectlo-1,x + + lda spvect+2 + sta spvecthi-1,x + + lda RROMBNK2 write protect lc ram. + + inc GP.numdevs + ldx GP.numdevs + tya + lsr + cmp #$08 + bcc .4 drive 2 mount + + sbc #$08 + ora #$08 + +.4 asl + asl + asl + asl + + ora devid include device attributes + sta devlist,x in the active device list. + + lda #remap_sp + sta drivertbl1,y device driver table 1 + lda /remap_sp + sta drivertbl1+1,y + rts +*-------------------------------------- +* self modifying jmp = smartport entry address +*-------------------------------------- +spvect jmp $0000 self modifying +*-------------------------------------- +LDR.CheckDiskID lda CLRC8ROM switch out $C8 ROMs ldy #$05 @@ -802,128 +898,16 @@ cmpid lda CLRC8ROM switch out $C8 ROMs clc clear if disk card .2 rts *-------------------------------------- -* self modifying jmp = smartport entry address -*-------------------------------------- -spvect jmp $0000 self modifying -*-------------------------------------- -newmount stz idxl - lda #$C7 start with slot 7 ($C700) - sta idxl+1 +LDR.SetDevID ldy #$FE check attributes byte. -H291F jsr H29EB is there a smartport device here? - bcs H2974 no, next device. - - ldy #$FF get smartport address. lda (idxl),y - clc - adc #$03 add 3 for smartport call - sta spvect+1 - lda idxl+1 - sta spvect+2 - - jsr setdevid set up device attributes - stz statunit - - jsr spvect do a status call on smartport itself - .HS 00 - .DA spcparms - - lda numdev2 # of devices on smartport - cmp #$03 - bcc H2974 only 2 devices,skip to next one. - inc add 1 for comparisons. - sta driveradr # of devices + 1. - -* find block devices on this smartport - -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 - .HS 00 - .DA spcparms - lda numdev2 is this a block device? - bmi mount yes, so mount it. - -H296E lda statunit go check the next unit# - inc - bra H295B - -H2974 dec idxl+1 - lda idxl+1 - cmp #$C0 searched down to slot 0? - bne H291F if not. + lsr move hi nibble to lo nibble for + lsr device table entries. + lsr + lsr + sta devid rts *-------------------------------------- -mount ldx #$0C - -.1 ldy driveridx,x - lda drivertbl1,y device driver table 1 - cmp #nodevice - bne .2 - lda drivertbl1+1,y - cmp /nodevice - beq .3 -.2 dex - bpl .1 - rts ran out of space for devices, exit. -* empty slot found -.3 lda idxl+1 - pha - phx - phy - tya which slot is empty? - lsr shift into slot# - and #$07 now 1-7 - ora #$C0 now $C1-$C7 - sta idxl+1 - jsr H29EB smartport interface in this slot? - ply - plx - pla - sta idxl+1 - bcc .2 yes, can't use to mirror the device. - jsr lc1in write enable LC ram bank 1. - tya divide index by 2 - lsr - tax - lda statunit - sta spunit-1,x store the smartport unit # - lda spvect+1 and entry address. - sta spvectlo-1,x - lda spvect+2 - sta spvecthi-1,x - lda RROMBNK2 write protect lc ram. - inc GP.numdevs - ldx GP.numdevs - tya - lsr - cmp #$08 - bcc nodev2 drive 2 mount - sbc #$08 - ora #$08 -nodev2 asl - asl - asl - asl - ora devid include device attributes - sta devlist,x in the active device list. - lda #remap_sp - sta drivertbl1,y device driver table 1 - lda /remap_sp - sta drivertbl1+1,y - bra H296E - -H29EB jsr cmpid is it a disk controller? - bcs .9 no, so return. - sec assume no smartport - ldy #$07 - lda (idxl),y is it a smartport? - bne .9 if not. - clc smartport found -.9 rts -*-------------------------------------- LDR.PrintA ldy LDR.Print.CX and #$7F cmp #$60 @@ -974,9 +958,9 @@ LDR.MLIRB.P .DA #3 .DA 0 2 byte block number .FIN -spcparms .DA #$03 # of parms -statunit .DA #$00 unit number (code for smartport stat) - .DA numdev2 +LDR.SPStatus.P .DA #$03 # of parms +LDR.SPStatus.U .DA #$00 unit number (code for smartport stat) + .DA LDR.SPStatus.Buf .DA #00 status code (0 = general status) driveridx .DA #$06 @@ -994,10 +978,12 @@ driveridx .DA #$06 .DA #$08 *-------------------------------------- LDR.Print.CX .BS 1 - -numdev2 .BS 8 8 bytes for smartport call -driveradr .DA 0 - +*-------------------------------------- +LDR.SPStatus.Buf .BS 8 8 bytes for smartport call +driveradr .BS 2 +LDR.SlotIdx .BS 1 +LDR.DevCnt .BS 7 +LDR.DevType .BS 7 LDR.cortland .DA #0 cortland loader flag (1 = Cortland) LDR.BootFlag .DA #0 0 = normal boot, <>0 = return *--------------------------------------