From e9beaf983c121c95a101d398ad61c80f42f53e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 13 Sep 2019 08:37:52 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes ProDOS.203/ProDOS.S.CCLK.txt | 2 +- ProDOS.203/ProDOS.S.GP.txt | 2 +- ProDOS.203/ProDOS.S.LDR.A.txt | 719 +++++++++--------- ProDOS.203/ProDOS.S.LDR.B.txt | 1243 ++++++++++++++++---------------- ProDOS.203/ProDOS.S.RAMX.txt | 2 +- ProDOS.203/ProDOS.S.SEL2.txt | 2 +- ProDOS.203/ProDOS.S.XDOS.M.txt | 6 +- ProDOS.203/ProDOS.S.txt | 24 +- 9 files changed, 1003 insertions(+), 997 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 08254aec34ade84f7a6b7ac128de4a5a2afbf860..7e1a96555cefb5a9cdc1995a53c6859383a3d436 100644 GIT binary patch delta 24059 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 delta 25687 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 indicates O/S initially booted. + sta OS_BOOT indicates O/S initially booted. jsr patch101 patch for gs/os - rev note #101 * put dispatcher in bank 2 of language card -H211D lda LDR.MLIONLINE.P+1 place boot devnum in globals +H211D lda LDR.MLIONLINE.P+1 place boot devnum in globals sta LDR.MLIREADBLOCK.P+1 sta devnum last device used jsr devsrch finish setting up globals @@ -122,7 +122,7 @@ H211D lda LDR.MLIONLINE.P+1 place boot devnum in globals ldy /rlclk64 jsr reloc -H2139 bcs H20CE +H2139 bcs H20CE lda #calldisp sta jspare+1 P8 system death vector lda /calldisp @@ -146,7 +146,7 @@ H2139 bcs H20CE ldy /dsp64 inc newquitflag using old quit code so set flag -H216E jsr reloc +H216E jsr reloc lda #$EE byte to distinguish LC bank 2 sta $D000 jsr lc1in switch in LC bank 1 @@ -189,7 +189,7 @@ noramdsk lda RROMWRAMBNK2 read ROM/write RAM bank 2 sty irqv lda #$01 -H21C5 sta irqflag 1 = new roms +H21C5 sta irqflag 1 = new roms stz cortflag assume not Cortland system lda cortland running on a Cortland ? beq H21D5 branch if not. @@ -198,16 +198,16 @@ H21C5 sta irqflag 1 = new roms * check for a rom in slot 3. if no rom, use internal $C300 firmware -H21D5 sta CLRC3ROM enable internal slot 3 ROM +H21D5 sta CLRC3ROM enable internal slot 3 ROM lda rommap slot ROM bit map and #$08 mask all but slot 3 - bne isRROMBNK23 taken if rom in slot 3 + bne isromin3 taken if rom in slot 3 bra H2247 else continue booting * found a rom in slot 3. is it an external, identifiable 80 col card * with interrupt routines? if so, enable it else use internal $C300 firmware. -isRROMBNK23 sta SETC3ROM enable slot 3 rom +isromin3 sta SETC3ROM enable slot 3 rom lda $C305 check card id bytes cmp #$38 bne hitswtch not terminal card @@ -244,19 +244,19 @@ hitswtch sta CLRC3ROM enable internal $C300 firmware lsr lsr txtp2 cmp txtp2 - -H2230 sta CLRPAGE2 main memory + .BS *-$2230 +H2230 sta CLRPAGE2 main memory sta CLR80STORE disable 80-col store beq docard branch if card is there lda machid machine ID byte and #$FD clear 80-col bit 2 (no card) bne H2244 always -docard lda machid +docard lda machid ora #$02 turn bit 2 on (80-col card is present) -H2244 sta machid -H2247 lda cortland are we running on a //gs ? +H2244 sta machid +H2247 lda cortland are we running on a //gs ? beq H225D if not. lda #$4C enable clock routine by putting a jmp sta clockv in front of clock vector @@ -266,7 +266,7 @@ H2247 lda cortland are we running on a //gs ? lda #$01 set bit 0 = clock present tsb machid -H225D lda setuprts get setup entry point flag +H225D lda setuprts get setup entry point flag beq H2267 taken if normal boot. lda RROMBNK2 read ROM rts return to caller at setup entry point. @@ -275,7 +275,7 @@ setuprts .DA #$00 0 = normal boot, <>0 = return * set prefix to boot device -H2267 jsr MLI online +H2267 jsr MLI online .DA #MLIONLINE .DA LDR.MLIONLINE.P bcs relocerr @@ -299,7 +299,7 @@ H2267 jsr MLI online ldy #$02 read directory into buffer lda /DirBlkBuf -H228E sta dst+1 +H228E sta dst+1 sta LDR.MLIREADBLOCK.P+4 sty LDR.MLIREADBLOCK.P+5 stx LDR.MLIREADBLOCK.P+6 @@ -323,7 +323,7 @@ H228E sta dst+1 cmp /dbuf+$800 until it points past end of buffer. bcc H228E if ok, read next block. -H22B7 jmp lodintrp jmp to 'licode' (load interpreter) +H22B7 jmp lodintrp jmp to 'licode' (load interpreter) * relocation/configuration error @@ -332,25 +332,25 @@ relocerr sta RROMBNK2 read ROM ldy #$1D -.1 lda LDR.MSG.LdrErr,y +.1 lda LDR.MSG.LdrErr,y sta vline12+4,y dey bpl .1 bmi * -LDR.MSG.LdrErr .AS "Relocation/Configuration Error" +LDR.MSG.LdrErr .AS -"Relocation/Configuration Error" H22EB ldy #$23 -.1 lda LDR.MSG.EnhErr,y +.1 lda LDR.MSG.EnhErr,y sta vline14+2,y dey bpl .1 bmi * -LDR.MSG.EnhErr .AS "REQUIRES ENHANCED APPLE IIE OR LATER" +LDR.MSG.EnhErr .AS -"REQUIRES ENHANCED APPLE IIE OR LATER" LDR.MLIONLINE.P .DA #2 .DA #$60 @@ -369,399 +369,400 @@ LDR.MLIREADBLOCK.P cortland .BS 1 cortland loader flag (1 = Cortland) newquitflag .BS 1 1 = old quit code -H232B .DA #1 move interpreter loader code +H232B .DA #1 move interpreter loader code .DA lodintrp destination address - .DA H257B-licode length to move - .DA licode source address - .DA #$01 move $3F0 vectors - .DA p3vect destination - .DA $0010 16 bytes to move - .DA H257B source - .DA #$01 - .DA lookptr - .DA $0002 - .DA dst - .DA #$01 move 128k test to zero page - .DA tst128 destination - .DA LDR.Test128.Len - .DA LDR.Test128 - .HS FF done + .DA H257B-licode length to move + .DA licode source address + .DA #$01 move $3F0 vectors + .DA p3vect destination + .DA $0010 16 bytes to move + .DA H257B source + .DA #$01 + .DA lookptr + .DA $0002 + .DA dst + .DA #$01 move 128k test to zero page + .DA tst128 destination + .DA LDR.Test128.Len + .DA LDR.Test128 + .HS FF done -dsp64 .DA #$01 move p8 dispatcher code - .DA displc2 destination - .DA birdbye-disp1obj length (must be <= 3 pages) - .DA disp1obj source - .HS FF done +dsp64 .DA #$01 move p8 dispatcher code + .DA displc2 destination + .DA birdbye-disp1obj length (must be <= 3 pages) + .DA disp1obj 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 - .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 + .HS FF done altdsptbl .DA #$01 move GQuit launcher - .DA displc2 destination - .DA $0300 length (must be <= 3 pages) - .DA GQdisp 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 - .HS FF done + .DA displc2 destination + .DA $0300 length (must be <= 3 pages) + .DA GQdisp 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 + .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 #$01 - .DA MLI globals - .DA $0100 in one page - .DA H2E00 - .HS 00 0=clear buffers $D700-$DDFF +H2367 .DA #$01 relocation table. 1=move src to dst + .DA lanirq destination + .DA H2E00-H2D9B length to move + .DA H2D9B source + .DA #$01 + .DA MLI globals + .DA $0100 in one page + .DA H2E00 + .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 #$01 - .DA rwts - .DA disp1obj-blockio length of disk ii driver - .DA blockio - .HS FF done + .DA #$01 + .DA xdosorg + .DA ramsrc-xdosobj length of mli + .DA xdosobj + .DA #$01 + .DA rwts + .DA disp1obj-blockio length of disk ii driver + .DA blockio + .HS FF done * move thunderclock -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 - .DA tclk_in - .HS 00 - .HS C1C1 -clock64 .DA #$00 - .HS FF done +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 + .DA tclk_in + .HS 00 + .HS C1C1 +clock64 .DA #$00 + .HS FF done * move cortland clock cortclock .DA #$01 relocation table. 1=move src to dst - .DA tclk_in destination - .DA cclk_end-cclock_0 length of cortland clock driver - .DA cclock_0 source - .HS FF done + .DA tclk_in destination + .DA cclk_end-cclock_0 length of cortland clock driver + .DA cclock_0 source + .HS FF done * load and run appletalk configuration file (atinit) if present * or continue loading and running .system file * loader origin $800 -ofsL .EQ *-lodintrp offset from loader org +ofsL .EQ *-lodintrp offset from loader org -licode jsr MLI check for file 'atinit' +licode jsr MLI check for file 'atinit' .DA #MLIGETFILEINFO .DA gfi_list bcc gfi_ok branch if 'atinit' file found cmp #$46 file not found? beq H23DF if so, continue loading interpreter bne H23E2 -gfi_ok lda gfi_type - cmp #$E2 is 'atinit' correct file type? - bne H23E2 error - wrong file type - jsr MLI open 'atinit' file - .DA #$C8 - .DA atopen parms - bne H23E2 error - lda #$9F max size = 39.75k ($2000-$BF00) - sta rdlen+1 - stz rdlen - jsr MLI read 'atinit' file to 'sysentry' - .DA #$CA - .DA rdparm - bne H23E2 error - too big - jsr MLI close 'atinit' file - .DA #$CC - .DA clparm - bne H23E2 error - lda RROMBNK2 enable ROM - jsr sysentry execute ATinit -H23DF jmp goloadint execute .system file +gfi_ok lda gfi_type + cmp #$E2 is 'atinit' correct file type? + bne H23E2 error - wrong file type + jsr MLI open 'atinit' file + .DA #$C8 + .DA atopen parms + bne H23E2 error + lda #$9F max size = 39.75k ($2000-$BF00) + sta rdlen+1 + stz rdlen + jsr MLI read 'atinit' file to 'sysentry' + .DA #$CA + .DA rdparm + bne H23E2 error - too big + jsr MLI close 'atinit' file + .DA #$CC + .DA clparm + bne H23E2 error + lda RROMBNK2 enable ROM + jsr sysentry execute ATinit +H23DF jmp goloadint execute .system file * fatal error -H23E2 ldx H23F0 -H23E5 lda H23F0,x +H23E2 ldx H23F0 +H23E5 lda H23F0,x sta vline16,x dex bne H23E5 beq * H23F0 .DA #$1A length of message - .AS "Unable to load ATInit file" + .AS -"Unable to load ATInit file" -gfi_list .EQ *-ofsL - .DA #$0A - .DA atinitname - .HS 00 -gfi_type .EQ *-ofsL - .HS 00000000 - .HS 0000000000000000 - .HS 0000 -atopen .EQ *-ofsL parms to open 'atinit' - .HS 03 - .DA atinitname - .DA iobuf i/o buffer - .HS 01 ref# hard coded since no other files -atinitname .EQ *-ofsL - .DA #06 length of name - .AS "atinit" name of appletalk config file -goloadint .EQ *-ofsL - lda /dbuf search directory buffer - sta idxl+1 - lda #$04 start 1 entry past header - bne H2434 always. -H2432 lda idxl calc next entry position -H2434 clc - adc dbuf+35 inc to next entry address - sta idxl - bcs H2451 branch if page cross. - adc dbuf+35 test for end of block. - bcc H2453 branch if not page cross - lda idxl+1 - lsr end of block? - bcc H2453 no. - cmp #$09 end of directory? - bne H244D no. - jmp nointrp no interpreter, go quit. -H244D lda #$04 reset index to 1st entry in next block. - sta idxl -H2451 inc idxl+1 inc to next page. -H2453 ldy #$10 check file type. - lda #$FF must be a prodos sys file - eor (idxl),y - bne H2432 if not sys. - tay see if active - lda (idxl),y - beq H2432 if deleted file. - and #$0F strip file 'kind'. - sta pbuf save length of name. - cmp #$08 must be at least 'x.system' - bcc H2432 else, ignore it. - tay compare last 7 chars for '.system' - ldx #$06 -H246C lda (idxl),y - eor iterp,x - asl - bne H2432 branch if something else - dey - dex - bpl H246C - ldy #$00 -H247A iny - lda (idxl),y - sta pbuf,y - ora #$80 msb on so can be displayed if error - sta iomess+$11,y - cpy pbuf - bne H247A - lda #$A0 space after name - sta iomess+$12,y - tya error message length - adc #$13 (carry set) - sta ierlen - jsr MLI open interpreter file - .DA #$C8 - .DA opparm - bne badlod - jsr MLI get eof (length of file) - .DA #$D1 - .DA efparm - bne badlod - lda eof+2 - bne toolong - lda eof+1 - cmp #$9F max size = 39.75k ($2000-$BF00) - bcs toolong - sta rdlen+1 - lda eof - sta rdlen (read entire file) - jsr MLI read interpreter file - .DA #$CA - .DA rdparm - beq H24C8 go close if successfully read. - cmp #$56 memory conflict? - beq toolong then too large - bne badlod else, unable to load. -H24C8 jsr MLI close interpreter file - .DA #$CC - .DA clparm - bne badlod hopefully never taken +gfi_list .EQ *-ofsL + .DA #$0A + .DA atinitname + .HS 00 +gfi_type .EQ *-ofsL + .HS 00000000 + .HS 0000000000000000 + .HS 0000 +atopen .EQ *-ofsL parms to open 'atinit' + .HS 03 + .DA atinitname + .DA iobuf i/o buffer + .HS 01 ref# hard coded since no other files +atinitname .EQ *-ofsL + .DA #06 length of name + .AS -"atinit" name of appletalk config file +goloadint .EQ *-ofsL + + lda /dbuf search directory buffer + sta idxl+1 + lda #$04 start 1 entry past header + bne H2434 always. +H2432 lda idxl calc next entry position +H2434 clc + adc dbuf+35 inc to next entry address + sta idxl + bcs H2451 branch if page cross. + adc dbuf+35 test for end of block. + bcc H2453 branch if not page cross + lda idxl+1 + lsr end of block? + bcc H2453 no. + cmp #$09 end of directory? + bne H244D no. + jmp nointrp no interpreter, go quit. +H244D lda #$04 reset index to 1st entry in next block. + sta idxl +H2451 inc idxl+1 inc to next page. +H2453 ldy #$10 check file type. + lda #$FF must be a prodos sys file + eor (idxl),y + bne H2432 if not sys. + tay see if active + lda (idxl),y + beq H2432 if deleted file. + and #$0F strip file 'kind'. + sta pbuf save length of name. + cmp #$08 must be at least 'x.system' + bcc H2432 else, ignore it. + tay compare last 7 chars for '.system' + ldx #$06 +H246C lda (idxl),y + eor iterp,x + asl + bne H2432 branch if something else + dey + dex + bpl H246C + ldy #$00 +H247A iny + lda (idxl),y + sta pbuf,y + ora #$80 msb on so can be displayed if error + sta iomess+$11,y + cpy pbuf + bne H247A + lda #$A0 space after name + sta iomess+$12,y + tya error message length + adc #$13 (carry set) + sta ierlen + jsr MLI open interpreter file + .DA #$C8 + .DA opparm + bne badlod + jsr MLI get eof (length of file) + .DA #$D1 + .DA efparm + bne badlod + lda eof+2 + bne toolong + lda eof+1 + cmp #$9F max size = 39.75k ($2000-$BF00) + bcs toolong + sta rdlen+1 + lda eof + sta rdlen (read entire file) + jsr MLI read interpreter file + .DA #$CA + .DA rdparm + beq H24C8 go close if successfully read. + cmp #$56 memory conflict? + beq toolong then too large + bne badlod else, unable to load. +H24C8 jsr MLI close interpreter file + .DA #$CC + .DA clparm + bne badlod hopefully never taken * if booting on a //c then see if esc is in keyboard buffer * and clear it. it may have been pressed to shift speed * of accelerator chip - lda cflag - beq H24DF taken if not booting on a //c - lda kbd else, check for keypress - cmp #$9B escape? - bne H24DF if not. - sta KBDSTROBE clear keyboard -H24DF lda RROMBNK2 enable ROM - jmp sysentry go run interpreter -cflag .EQ *-ofsL - .HS 00 set if a //c. -nointrp .EQ *-ofsL no interpreter found, - jsr MLI so quit. - .DA #$65 - .DA quitparm -badlod ldy ierlen center the error message - lda #$27 - sec - sbc ierlen - lsr - adc ierlen - tax -H24FA lda iomess,y - sta vline16,x - dex - dey - bpl H24FA - bmi H2511 -toolong ldy #$1E -H2508 lda lgmess,y - sta vline16+5,y - dey - bpl H2508 -H2511 bmi H2511 -lgmess .EQ *-ofsL - .AS "** System program too large **" -iomess .EQ *-ofsL - .AS "** Unable to load" - .AS " X.System *********" -ierlen .EQ *-ofsL - .HS 00 -opparm .EQ *-ofsL parms for open call - .HS 03 - .DA pbuf - .DA iobuf - .HS 01 -efparm .EQ *-ofsL parms for get eof call - .HS 02 - .DA #01 -eof .EQ *-ofsL - .HS 000000 length of file. -rdparm .EQ *-ofsL parms for read call - .HS 04 - .HS 01 - .DA sysentry -rdlen .EQ *-ofsL - .HS 0000 - .HS 0000 -clparm .EQ *-ofsL parms for close call - .HS 01 - .HS 00 -quitparm .EQ *-ofsL parms for quit call - .HS 04 - .HS 00 - .HS 0000 - .HS 00 - .HS 0000 -iterp .EQ *-ofsL interpreter suffix that is required - .AS ".SYSTEM" + lda cflag + beq H24DF taken if not booting on a //c + lda kbd else, check for keypress + cmp #$9B escape? + bne H24DF if not. + sta KBDSTROBE clear keyboard +H24DF lda RROMBNK2 enable ROM + jmp sysentry go run interpreter +cflag .EQ *-ofsL + .HS 00 set if a //c. +nointrp .EQ *-ofsL no interpreter found, + jsr MLI so quit. + .DA #$65 + .DA quitparm +badlod ldy ierlen center the error message + lda #$27 + sec + sbc ierlen + lsr + adc ierlen + tax +H24FA lda iomess,y + sta vline16,x + dex + dey + bpl H24FA + bmi H2511 +toolong ldy #$1E +H2508 lda lgmess,y + sta vline16+5,y + dey + bpl H2508 +H2511 bmi H2511 +lgmess .EQ *-ofsL + .AS -"** System program too large **" +iomess .EQ *-ofsL + .AS -"** Unable to load" + .AS -" X.System *********" +ierlen .EQ *-ofsL + .HS 00 +opparm .EQ *-ofsL parms for open call + .HS 03 + .DA pbuf + .DA iobuf + .HS 01 +efparm .EQ *-ofsL parms for get eof call + .HS 02 + .DA #01 +eof .EQ *-ofsL + .HS 000000 length of file. +rdparm .EQ *-ofsL parms for read call + .HS 04 + .HS 01 + .DA sysentry +rdlen .EQ *-ofsL + .HS 0000 + .HS 0000 +clparm .EQ *-ofsL parms for close call + .HS 01 + .HS 00 +quitparm .EQ *-ofsL parms for quit call + .HS 04 + .HS 00 + .HS 0000 + .HS 00 + .HS 0000 +iterp .EQ *-ofsL interpreter suffix that is required + .AS -".SYSTEM" * 16 bytes moved to $03F0 vectors H257B .DA breakv - .DA oldrst - .DA #$5A powerup byte - jmp oldrst '&' vector - jmp oldrst ctrl-y vector - .HS 004000 - .DA irqent global page interrupt vector -lc1in lda RRAMWRAMBNK1 read/write language card RAM bank 1 - lda RRAMWRAMBNK1 - rts + .DA oldrst + .DA #$5A powerup byte + jmp oldrst '&' vector + jmp oldrst ctrl-y vector + .HS 004000 + .DA irqent global page interrupt vector +lc1in lda RRAMWRAMBNK1 read/write language card RAM bank 1 + lda RRAMWRAMBNK1 + rts * determine which system model and save in machine id (idapple) -whchrom stz idapple assume standard apple // - ldx version check hardware id - cpx #$38 is it apple // (autostart rom)? - beq H25BE if yes - lda #$80 - cpx #$06 apple //e? - beq H25BC if yes - lda #$40 - cpx #$EA apple //+? - bne H25B6 it not, then machine is unknown. - ldx $FB1E apple /// in emulation? - cpx #$AD - beq H25BC taken if apple //+. - lda #$D0 test again for apple /// emulation - cpx #$8A because will only have 48k memory. - bne H25B6 if taken, then machine is unknown. -H25B4 sec apple /// emulation is not allowed - rts because insufficient memory. -H25B6 lda #$02 machine unknown - sta (dst),y - bne H25D9 always. -H25BC sta idapple save machine id +whchrom stz idapple assume standard apple // + ldx version check hardware id + cpx #$38 is it apple // (autostart rom)? + beq H25BE if yes + lda #$80 + cpx #$06 apple //e? + beq H25BC if yes + lda #$40 + cpx #$EA apple //+? + bne H25B6 it not, then machine is unknown. + ldx $FB1E apple /// in emulation? + cpx #$AD + beq H25BC taken if apple //+. + lda #$D0 test again for apple /// emulation + cpx #$8A because will only have 48k memory. + bne H25B6 if taken, then machine is unknown. +H25B4 sec apple /// emulation is not allowed + rts because insufficient memory. +H25B6 lda #$02 machine unknown + sta (dst),y + bne H25D9 always. +H25BC sta idapple save machine id * check for language card ram -H25BE jsr lc1in switch in language card bank 1 - lda #$AA - sta $D000 - eor $D000 if LC present, result = 0. - bne H25B4 othewise, insufficient memory. - lsr $D000 check lc again - lda #$55 - eor $D000 - bne H25B4 not sufficent memory. - lda #$20 LC ram is available - ora idapple -H25D9 jmp tst128 jumps to page 0 routine below +H25BE jsr lc1in switch in language card bank 1 + lda #$AA + sta $D000 + eor $D000 if LC present, result = 0. + bne H25B4 othewise, insufficient memory. + lsr $D000 check lc again + lda #$55 + eor $D000 + bne H25B4 not sufficent memory. + lda #$20 LC ram is available + ora idapple +H25D9 jmp tst128 jumps to page 0 routine below * test for 128k. use page 0 for this routine -LDR.Test128 sta idapple H25DC-2621 was moved to location tst128 - bpl not128 if already determined < 128k - lda #$EE - sta SETWRITEAUX write to aux mem while on main zp - sta SETREADAUX and read aux mem. - sta dbuf write these locs just to test aux mem - sta lodintrp 1k apart from each other. - lda dbuf - cmp #$EE - bne noaux - asl dbuf may be sparse mem mapping so - asl change value and see what happens. - cmp dbuf - bne noaux branch if not sparse mapping. - cmp lodintrp - bne H2606 if not sparse. -noaux sec no aux memory available. - bcs H2607 -H2606 clc -H2607 sta CLRWRITEAUX switch back to main memory - sta CLRREADAUX - bcs not128 if < 128k - lda idapple - ora #$30 set id = 128k present - sta idapple -not128 lda lookptr+1 - sec - sbc #$05 - sta lookptr+1 - bcs H2620 - dec lookptr -H2620 clc - rts +LDR.Test128 sta idapple H25DC-2621 was moved to location tst128 + bpl not128 if already determined < 128k + lda #$EE + sta SETWRITEAUX write to aux mem while on main zp + sta SETREADAUX and read aux mem. + sta dbuf write these locs just to test aux mem + sta lodintrp 1k apart from each other. + lda dbuf + cmp #$EE + bne noaux + asl dbuf may be sparse mem mapping so + asl change value and see what happens. + cmp dbuf + bne noaux branch if not sparse mapping. + cmp lodintrp + bne H2606 if not sparse. +noaux sec no aux memory available. + bcs H2607 +H2606 clc +H2607 sta CLRWRITEAUX switch back to main memory + sta CLRREADAUX + bcs not128 if < 128k + lda idapple + ora #$30 set id = 128k present + sta idapple +not128 lda lookptr+1 + sec + sbc #$05 + sta lookptr+1 + bcs H2620 + dec lookptr +H2620 clc + rts LDR.Test128.len .EQ *-LDR.Test128 MAN SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.A diff --git a/ProDOS.203/ProDOS.S.LDR.B.txt b/ProDOS.203/ProDOS.S.LDR.B.txt index 5c415eeb..e65aa6b4 100644 --- a/ProDOS.203/ProDOS.S.LDR.B.txt +++ b/ProDOS.203/ProDOS.S.LDR.B.txt @@ -22,28 +22,28 @@ LDR.Splash lda SPEAKER click speaker ldx #$1D -.2 lda LDR.MSG.ProDOS,x +.2 lda LDR.MSG.ProDOS,x sta vline12+5,x dex bpl .2 ldx #$0B -.3 lda H202F,x +.3 lda H202F,x sta vline14+14,x dex bpl .3 ldx #$26 -.4 lda LDR.MSG.Copyright,x +.4 lda LDR.MSG.Copyright,x sta vline23,x dex bpl .4 ldx #$13 -.5 lda LDR.MSG.Reserved,x +.5 lda LDR.MSG.Reserved,x sta vline24+10,x dex bpl .5 @@ -55,7 +55,7 @@ LDR.Splash lda SPEAKER click speaker lda #$80 trb newvideo video mode select -.8 lda SPEAKER click speaker +.8 lda SPEAKER click speaker rts * find all disk devices in system slots and set up address @@ -65,7 +65,7 @@ LDR.Splash lda SPEAKER click speaker numdev2 .HS 0000000000000000 8 bytes for smartport call driveradr .DA 0 -d2idx .DA #0 +d2idx .DA #0 diskins2 .DA #0 msb clear if drive in slot 2 devsrch stz dst @@ -86,197 +86,197 @@ devsrch stz dst lda #$C7 search slots from high to low sta idxl+1 -H26AB jsr cmpid - bcs H270C if no ProDOS device in this slot. - lda (idxl),y check last byte of $Cn rom (y = $ff) - beq diskii branch if 16 sector disk II. - cmp #$FF if = $FF then 13 sector disk II. - bcs H270C ignore if 13 sector boot ROM - sta driveradr else assume it's an intelligent disk. - ldy #$07 check for a smartport device. - lda (idxl),y - bne H26C4 no smartport - jmp smartprt -H26C4 ldy #$FE - lda (idxl),y get attributes. - and #$03 verify it provides read and status calls. - cmp #$03 - sec assume it's an off-brand disk - bne H270C - jsr setdevid set up the devid byte from attributes - clc - php remember that it's not a disk //. - lsr move # of units (0=1, 1=2) to carry. - lda idxl+1 store hi entry addr (low already done) - bne H26E6 branch always. -diskii sta devid =0 since disk ii's have null attributes - sec - php remember it's a disk // - lda H2802 - sta driveradr - lda H2802+1 -H26E6 sta driveradr+1 - jsr installdev install 1 or 2 devices from this slot. - plp get back if it's a disk // (carry). - bcc nxtdsk2 if not disk //. - dex move the list pointer back by 2 devices - dex - stx numdevs count (-1) active devices - dec d2idx increase the disk two index - dec d2idx - ldy d2idx - inx adj since device count starts with $FF. - lda devlist+1,x get entries for disk // - sta devlist,y move then toward the end of the list - lda devlist,x - sta devlist+1,y - dex back to numdevs again -nxtdsk2 clc -H270C jsr sltrom test for ROM in given slot and set flags - dec idxl+1 next lower slot. - lda idxl+1 - and #$07 have all slots been checked ? - bne H26AB no. +H26AB jsr cmpid + bcs H270C if no ProDOS device in this slot. + lda (idxl),y check last byte of $Cn rom (y = $ff) + beq diskii branch if 16 sector disk II. + cmp #$FF if = $FF then 13 sector disk II. + bcs H270C ignore if 13 sector boot ROM + sta driveradr else assume it's an intelligent disk. + ldy #$07 check for a smartport device. + lda (idxl),y + bne H26C4 no smartport + jmp smartprt +H26C4 ldy #$FE + lda (idxl),y get attributes. + and #$03 verify it provides read and status calls. + cmp #$03 + sec assume it's an off-brand disk + bne H270C + jsr setdevid set up the devid byte from attributes + clc + php remember that it's not a disk //. + lsr move # of units (0=1, 1=2) to carry. + lda idxl+1 store hi entry addr (low already done) + bne H26E6 branch always. +diskii sta devid =0 since disk ii's have null attributes + sec + php remember it's a disk // + lda H2802 + sta driveradr + lda H2802+1 +H26E6 sta driveradr+1 + jsr installdev install 1 or 2 devices from this slot. + plp get back if it's a disk // (carry). + bcc nxtdsk2 if not disk //. + dex move the list pointer back by 2 devices + dex + stx numdevs count (-1) active devices + dec d2idx increase the disk two index + dec d2idx + ldy d2idx + inx adj since device count starts with $FF. + lda devlist+1,x get entries for disk // + sta devlist,y move then toward the end of the list + lda devlist,x + sta devlist+1,y + dex back to numdevs again +nxtdsk2 clc +H270C jsr sltrom test for ROM in given slot and set flags + dec idxl+1 next lower slot. + lda idxl+1 + and #$07 have all slots been checked ? + bne H26AB no. * perform the new device search, mapping unmounted smartport devices * to empty slots in the device table. - jsr newmount + jsr newmount * now copy the disk // list to the end of the regular list. * start by making the device count include disk //'s - ldx numdevs current device count - 1 - lda #$0E - sec - sbc d2idx - beq H2747 if there were no disk //'s then done. - clc - adc numdevs sum of disk //'s and others. - sta 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 - inx - dey - sty d2idx use as a temp - cpx d2idx - bcc H272F continue until indexes cross -H2747 ldy #$00 - ldx 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 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 jsr fndtrd save accumulated machine id. - beq H2787 - sta machid machine ID byte - rts -H2787 jmp H25B6 -stadrv ora devid combine with attributes. - ldx numdevs - inx put device # into device list. - sta devlist,x - asl now form drive 2 device number, if any. - rts -sltrom bcc H27F3 branch if disk drive + ldx numdevs current device count - 1 + lda #$0E + sec + sbc d2idx + beq H2747 if there were no disk //'s then done. + clc + adc numdevs sum of disk //'s and others. + sta 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 + inx + dey + sty d2idx use as a temp + cpx d2idx + bcc H272F continue until indexes cross +H2747 ldy #$00 + ldx 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 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 jsr fndtrd save accumulated machine id. + beq H2787 + sta machid machine ID byte + rts +H2787 jmp H25B6 +stadrv ora devid combine with attributes. + ldx numdevs + inx put device # into device list. + sta devlist,x + asl now form drive 2 device number, if any. + rts +sltrom bcc H27F3 branch if disk drive * test for clock card - ldy #$06 -H2799 lda (idxl),y - cmp dskid,y - bne H27BA no clock - dey - dey - bpl H2799 - lda idxl+1 transfer hi slot address - sbc #$C1 minus $C1 (default) to relocate - sta clock64 references to clock rom. - lda #$4C enable jump vector in globals. - sta clockv P8 clock vector. - lda idapple mark clock as present. - beq H277E - ora #$01 - sta idapple xxxxxxx1 = clock present. - bne H27F3 always taken. + ldy #$06 +H2799 lda (idxl),y + cmp dskid,y + bne H27BA no clock + dey + dey + bpl H2799 + lda idxl+1 transfer hi slot address + sbc #$C1 minus $C1 (default) to relocate + sta clock64 references to clock rom. + lda #$4C enable jump vector in globals. + sta clockv P8 clock vector. + lda idapple mark clock as present. + beq H277E + ora #$01 + sta idapple xxxxxxx1 = clock present. + bne H27F3 always taken. * test for 80 col card -H27BA ldy #$05 - lda (idxl),y - cmp #$38 - bne H27E4 - ldy #$07 - lda (idxl),y - cmp #$18 - bne H27E4 - ldy #$0B - lda (idxl),y - dec must = 1 - bne H27E4 - iny - lda (idxl),y - and #$F0 mask off low nibble. - cmp #$80 generic for 80-col card. - bne H27E4 - lda idapple - beq H277E - ora #$02 - sta idapple xxxxxx1x = 80 col card. - bne H27F3 always taken. +H27BA ldy #$05 + lda (idxl),y + cmp #$38 + bne H27E4 + ldy #$07 + lda (idxl),y + cmp #$18 + bne H27E4 + ldy #$0B + lda (idxl),y + dec must = 1 + bne H27E4 + iny + lda (idxl),y + and #$F0 mask off low nibble. + cmp #$80 generic for 80-col card. + bne H27E4 + lda idapple + beq H277E + ora #$02 + sta idapple xxxxxx1x = 80 col card. + bne H27F3 always taken. * test for any other rom -H27E4 ldx #$00 - lda (idxl) - cmp #$FF apple /// non-slot? - beq H2801 invalid rom -H27EC cmp (idxl) look for floating bus - bne H2801 no rom - inx - bne H27EC -H27F3 lda idxl+1 mark a bit in slot byte - and #$07 to indicate rom present. - tax - lda sltbit,x - ora rommap mark bit to flag rom present - sta rommap slot ROM bit map -H2801 rts +H27E4 ldx #$00 + lda (idxl) + cmp #$FF apple /// non-slot? + beq H2801 invalid rom +H27EC cmp (idxl) look for floating bus + bne H2801 no rom + inx + bne H27EC +H27F3 lda idxl+1 mark a bit in slot byte + and #$07 to indicate rom present. + tax + lda sltbit,x + ora rommap mark bit to flag rom present + sta rommap slot ROM bit map +H2801 rts -H2802 .DA rwts disk ii driver +H2802 .DA rwts disk ii driver * id bytes: evens for clock, odds for disk -dskid .HS 082028005803703C +dskid .HS 082028005803703C * slot bits @@ -284,7 +284,7 @@ sltbit .HS 0002040810204080 fndtrd clc ldy sltbit -H2818 lda (lookptr),y +H2818 lda (lookptr),y and #$DF adc sltbit sta sltbit @@ -304,7 +304,7 @@ H2818 lda (lookptr),y lda idapple rts -H283B lda #$00 +H283B lda #$00 rts installdev php how many drives (carry). @@ -322,123 +322,123 @@ installdev php how many drives (carry). inx else presume that 2nd drive is present. sta devlist,x active device list. -H2853 stx numdevs save updated device count. +H2853 stx numdevs save updated device count. asl shift # of drives back into carry. lda driveradr get high address of device driver. sta drivertbl1,y device driver table 1. bcc H2862 branch if single drive. sta drivertbl2,y device driver table 2. -H2862 lda driveradr+1 +H2862 lda driveradr+1 sta drivertbl1+1,y bcc H286D sta drivertbl2+1,y -H286D rts +H286D 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 +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 * do a prodos status call patched in from above -pscall jsr $0000 self modifying code - ldy #$FB - lda (idxl),y check device id - and #$02 SCSI? - beq H28B1 no, no need to init Cocoon - sta statunit device = 2 for SCSI +pscall jsr $0000 self modifying code + ldy #$FB + lda (idxl),y check device id + and #$02 SCSI? + beq H28B1 no, no need to init Cocoon + sta statunit device = 2 for SCSI * initialize SCSI Cocoon to build internal device tables * and report true # of devices attached - jsr spvect status of Cocoon - .HS 00 - .DA spcparms ignore any errors. -H28B1 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 + jsr spvect status of Cocoon + .HS 00 + .DA spcparms ignore any errors. +H28B1 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 * for slot 5, if there is a disk card in slot 2 * then only install 2 devices otherwise map * extra devices as slot 2 - bit diskins2 disk in slot 2 ? - bpl donesp yes - so done - 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 jmp nxtdsk2 it's a disk device. -setdevid ldy #$FE check attributes byte. -H28E8 lda (idxl),y - lsr move hi nibble to lo nibble for - lsr device table entries. - lsr - lsr - sta devid - rts + bit diskins2 disk in slot 2 ? + bpl donesp yes - so done + 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 jmp nxtdsk2 it's a disk device. +setdevid ldy #$FE check attributes byte. +H28E8 lda (idxl),y + lsr move hi nibble to lo nibble for + lsr device table entries. + lsr + lsr + sta devid + rts * check unknown card to see if disk id = $Cn00:nn 20 nn 00 nn 03 -cmpid lda CLRC8ROM switch out $C8 ROMs - ldy #$05 -H28F6 lda (idxl),y compare id bytes - cmp dskid,y - sec set if no disk card - bne H2903 - dey - dey - bpl H28F6 loop until all 4 id bytes match. - clc clear if disk card -H2903 rts +cmpid lda CLRC8ROM switch out $C8 ROMs + ldy #$05 +H28F6 lda (idxl),y compare id bytes + cmp dskid,y + sec set if no disk card + bne H2903 + dey + dey + bpl H28F6 loop until all 4 id bytes match. + clc clear if disk card +H2903 rts * smartport call parameters -spcparms .DA #$03 # of parms -statunit .DA #$00 unit number (code for smartport stat) - .DA numdev2 - .DA #00 status code (0 = general status) +spcparms .DA #$03 # of parms +statunit .DA #$00 unit number (code for smartport stat) + .DA numdev2 + .DA #00 status code (0 = general status) * indexes into driver table -driveridx .DA #$06 s3, d1 +driveridx .DA #$06 s3, d1 .DA #$1E s7, d2 .DA #$0E s7, d1 .DA #$1C s6, d2 @@ -454,123 +454,123 @@ driveridx .DA #$06 s3, d1 * self modifying jmp = smartport entry address -spvect jmp $0000 self modifying -newmount stz idxl - lda #$C7 start with slot 7 ($C700) - sta idxl+1 -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 - dey - jsr H28E8 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. - lda #$03 start at unit #3 (non-slot 5) - ldx spvect+2 - cpx #$C5 is this slot 5? - bne H295B no, start at 3. - bit diskins2 disk controller in slot 2? - bpl H295B yes, so allow remapping of s5 devices - lda #$05 else start looking at unit #5 +spvect jmp $0000 self modifying +newmount stz idxl + lda #$C7 start with slot 7 ($C700) + sta idxl+1 +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 + dey + jsr H28E8 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. + lda #$03 start at unit #3 (non-slot 5) + ldx spvect+2 + cpx #$C5 is this slot 5? + bne H295B no, start at 3. + bit diskins2 disk controller in slot 2? + bpl H295B yes, so allow remapping of s5 devices + lda #$05 else start looking at unit #5 * 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. - rts -mount ldx #$0C -H297F ldy driveridx,x - lda drivertbl1,y device driver table 1 - cmp #nodevice - bne H2990 - lda drivertbl1+1,y - cmp /nodevice - beq H2994 -H2990 dex - bpl H297F - rts ran out of space for devices, exit. +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. + rts +mount ldx #$0C +H297F ldy driveridx,x + lda drivertbl1,y device driver table 1 + cmp #nodevice + bne H2990 + lda drivertbl1+1,y + cmp /nodevice + beq H2994 +H2990 dex + bpl H297F + rts ran out of space for devices, exit. * empty slot found -H2994 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 H2990 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 numdevs - ldx 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 H29F8 no, so return. - sec assume no smartport - ldy #$07 - lda (idxl),y is it a smartport? - bne H29F8 if not. - clc smartport found -H29F8 rts +H2994 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 H2990 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 numdevs + ldx 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 H29F8 no, so return. + sec assume no smartport + ldy #$07 + lda (idxl),y is it a smartport? + bne H29F8 if not. + clc smartport found +H29F8 rts * relocation subroutine. on entry, regs yx = address of parameter table * with the following parameters: @@ -593,231 +593,234 @@ H29F8 rts * on exit, carry set if error and yx = addr of error * with acc = $00 for table error or $FF if illegal opcode -reloc stx idxl save address of control table - sty idxl+1 -rloop lda (idxl) get relocation command. - cmp #$05 - bcs rlend taken if >= 5 then done. - tax move destination to page 0 - ldy #$01 for indirect access. - lda (idxl),y - sta dst - iny - lda (idxl),y - sta dst+1 - iny - lda (idxl),y also the length (byte count) - sta cnt of the destination area. - iny - lda (idxl),y - sta cnt+1 - bmi rlerr branch if >= 32k. - txa is it a request to zero destination? - beq zero if yes. - iny - lda (idxl),y get source address. - sta src used for move. - sta cde used for relocation - iny - clc - adc cnt add length to get final address - sta ecde - lda (idxl),y - sta src+1 - sta cde+1 - adc cnt+1 - sta ecde+1 - dex test for 'move' command - beq H2AA3 branch if move only (no relocation) - stx wsize save element size (1,2,3) - iny - lda (idxl),y get # of ranges that are valid - sta sgcnt relocation target addresses. - tax separate serial range groups into tbls -H2A42 iny - lda (idxl),y transfer low limits to 'limlo' table - sta limlo,x - dex - bpl H2A42 - ldx sgcnt # of ranges -H2A4E iny - lda (idxl),y transfer high limits to 'limhi' table - sta limhi,x - dex - bpl H2A4E - ldx sgcnt # of ranges -H2A5A iny - lda (idxl),y transfer offsets to 'ofset' table - sta ofset,x - dex - bpl H2A5A - jsr adjtbl adj index pointer to next entry. - ldx wsize test for machine code relocation - cpx #$03 - beq rlcode branch if program relocation - jsr reladr otherwise, relocate addresses in -H2A70 jsr moveSrcDst tables then move to destination. - bra rloop do next table -rlend clc - rts -rlerr jmp tblerr -rlcode jsr rlprog relocate machine code refs - bra H2A70 +reloc stx idxl save address of control table + sty idxl+1 +rloop lda (idxl) get relocation command. + cmp #$05 + bcs rlend taken if >= 5 then done. + tax move destination to page 0 + ldy #$01 for indirect access. + lda (idxl),y + sta dst + iny + lda (idxl),y + sta dst+1 + iny + lda (idxl),y also the length (byte count) + sta cnt of the destination area. + iny + lda (idxl),y + sta cnt+1 + bmi rlerr branch if >= 32k. + txa is it a request to zero destination? + beq zero if yes. + iny + lda (idxl),y get source address. + sta src used for move. + sta cde used for relocation + iny + clc + adc cnt add length to get final address + sta ecde + lda (idxl),y + sta src+1 + sta cde+1 + adc cnt+1 + sta ecde+1 + dex test for 'move' command + beq H2AA3 branch if move only (no relocation) + stx wsize save element size (1,2,3) + iny + lda (idxl),y get # of ranges that are valid + sta sgcnt relocation target addresses. + tax separate serial range groups into tbls +H2A42 iny + lda (idxl),y transfer low limits to 'limlo' table + sta limlo,x + dex + bpl H2A42 + ldx sgcnt # of ranges +H2A4E iny + lda (idxl),y transfer high limits to 'limhi' table + sta limhi,x + dex + bpl H2A4E + ldx sgcnt # of ranges +H2A5A iny + lda (idxl),y transfer offsets to 'ofset' table + sta ofset,x + dex + bpl H2A5A + jsr adjtbl adj index pointer to next entry. + ldx wsize test for machine code relocation + cpx #$03 + beq rlcode branch if program relocation + jsr reladr otherwise, relocate addresses in +H2A70 jsr moveSrcDst tables then move to destination. + bra rloop do next table +rlend clc + rts +rlerr jmp tblerr +rlcode jsr rlprog relocate machine code refs + bra H2A70 * fill destination range with 0's -zero jsr adjtbl adj table pointer to next entry. - lda #$00 - ldy cnt+1 is it at least 1 page? - beq H2A94 branch if not. - tay -H2A89 sta (dst),y - iny - bne H2A89 - inc dst+1 next page - dec cnt+1 - bne H2A89 if more pages to clear. -H2A94 ldy cnt any bytes left to 0? - beq H2AA0 if not. - tay -H2A99 sta (dst),y zero out remainder - iny - cpy cnt - bcc H2A99 -H2AA0 jmp rloop -H2AA3 jsr adjtbl - bra H2A70 -adjtbl tya add previous table length to - sec get next entry position in table - adc idxl - sta idxl - bcc H2AB2 - inc idxl+1 -H2AB2 rts -moveSrcDst lda src+1 is move up, down or not at all? - cmp dst+1 - bcc movup - bne movdn - lda src - cmp dst - bcc movup - bne movdn - rts no move. -movup ldy cnt+1 calc highest page to move up - tya and adj src and dst. - clc - adc src+1 - sta src+1 - tya - clc - adc dst+1 - sta dst+1 - ldy cnt move partial page 1st. - beq H2ADE taken if no partial pages -H2AD6 dey - lda (src),y - sta (dst),y - tya end of page transfer? - bne H2AD6 no -H2ADE dec dst+1 - dec src+1 - dec cnt+1 done with all pages? - bpl H2AD6 no - rts -movdn ldy #$00 - lda cnt+1 partial page move only? - beq H2AFC taken if < 1 page to move -H2AED lda (src),y - sta (dst),y - iny - bne H2AED - inc dst+1 next page - inc src+1 - dec cnt+1 more pages? - bne H2AED if more. -H2AFC lda cnt move partial page. - beq H2B09 if no more to move -H2B00 lda (src),y - sta (dst),y - iny - cpy cnt - bne H2B00 -H2B09 rts +zero jsr adjtbl adj table pointer to next entry. + lda #$00 + ldy cnt+1 is it at least 1 page? + beq H2A94 branch if not. + tay +H2A89 sta (dst),y + iny + bne H2A89 + inc dst+1 next page + dec cnt+1 + bne H2A89 if more pages to clear. +H2A94 ldy cnt any bytes left to 0? + beq H2AA0 if not. + tay +H2A99 sta (dst),y zero out remainder + iny + cpy cnt + bcc H2A99 +H2AA0 jmp rloop +H2AA3 jsr adjtbl + bra H2A70 +adjtbl tya add previous table length to + sec get next entry position in table + adc idxl + sta idxl + bcc H2AB2 + inc idxl+1 +H2AB2 rts +moveSrcDst lda src+1 is move up, down or not at all? + cmp dst+1 + bcc movup + bne movdn + lda src + cmp dst + bcc movup + bne movdn + rts no move. +movup ldy cnt+1 calc highest page to move up + tya and adj src and dst. + clc + adc src+1 + sta src+1 + tya + clc + adc dst+1 + sta dst+1 + ldy cnt move partial page 1st. + beq H2ADE taken if no partial pages +H2AD6 dey + lda (src),y + sta (dst),y + tya end of page transfer? + bne H2AD6 no +H2ADE dec dst+1 + dec src+1 + dec cnt+1 done with all pages? + bpl H2AD6 no + rts +movdn ldy #$00 + lda cnt+1 partial page move only? + beq H2AFC taken if < 1 page to move +H2AED lda (src),y + sta (dst),y + iny + bne H2AED + inc dst+1 next page + inc src+1 + dec cnt+1 more pages? + bne H2AED if more. +H2AFC lda cnt move partial page. + beq H2B09 if no more to move +H2B00 lda (src),y + sta (dst),y + iny + cpy cnt + bne H2B00 +H2B09 rts * relocate addresses -reladr ldy wsize 1 or 2 byte reference - dey - lda (cde),y - jsr adjadr relocate reference. - lda wsize update and test code pointer. - jsr adjcde - bcc reladr if more to do - rts -rlprog ldy #$00 get next opcode - lda (cde),y - jsr oplen determine if a 3 byte instruction. - beq rperr branch if not an opcode - cmp #$03 - bne H2B30 - ldy #$02 - jsr adjadr relocate address - lda #$03 -H2B30 jsr adjcde update and test if done. - bcc rlprog if more to do - rts -rperr pla - pla - ldx cde bad code address in y,x - ldy cde+1 - lda #$FF indicates bad opcode - sec - rts -tblerr ldx idxl bad table address in y,x - ldy idxl+1 - lda #$00 indicates input table error - sec - rts -adjadr lda (cde),y get page address and - ldx sgcnt test against limits. -H2B4D cmp limlo,x is it >= low? - bcc H2B59 if not. - cmp limhi,x is it <= high? - bcc H2B5D branch if it is - beq H2B5D -H2B59 dex try next limit set - bpl H2B4D - rts return w/o adjustment. -H2B5D clc add offset to form relocated - adc ofset,x page address and replace - sta (cde),y old address with result. - rts -adjcde clc update code pointer - adc cde - ldy cde+1 - bcc H2B6C branch if not page cross - iny otherwise, update page#. -H2B6C cpy ecde+1 has all code/data been processed? - bcc H2B72 if not. - cmp ecde -H2B72 sta cde save updated values. - sty cde+1 - rts return result (carry set = done). -oplen pha form index to tbl & which 2-bit group. - and #$03 low 2 bits specify group - tay - pla - lsr upper 6 bits specify byte in table - lsr - tax - lda opcodln,x -nxgroup dey is opcode len in lowest 2 bits of acc? - bmi H2B89 branch if it is - lsr shift to next group. - lsr (if length = 0 then error) - bne nxgroup -H2B89 and #$03 - rts if z-set then error +reladr ldy wsize 1 or 2 byte reference + dey + lda (cde),y + jsr adjadr relocate reference. + lda wsize update and test code pointer. + jsr adjcde + bcc reladr if more to do + rts +rlprog ldy #$00 get next opcode + lda (cde),y + jsr oplen determine if a 3 byte instruction. + beq rperr branch if not an opcode + cmp #$03 + bne H2B30 + ldy #$02 + jsr adjadr relocate address + lda #$03 +H2B30 jsr adjcde update and test if done. + bcc rlprog if more to do + rts +rperr pla + pla + ldx cde bad code address in y,x + ldy cde+1 + lda #$FF indicates bad opcode + sec + rts +tblerr ldx idxl bad table address in y,x + ldy idxl+1 + lda #$00 indicates input table error + sec + rts +adjadr lda (cde),y get page address and + ldx sgcnt test against limits. +H2B4D cmp limlo,x is it >= low? + bcc H2B59 if not. + cmp limhi,x is it <= high? + bcc H2B5D branch if it is + beq H2B5D +H2B59 dex try next limit set + bpl H2B4D + rts return w/o adjustment. +H2B5D clc add offset to form relocated + adc ofset,x page address and replace + sta (cde),y old address with result. + rts +adjcde clc update code pointer + adc cde + ldy cde+1 + bcc H2B6C branch if not page cross + iny otherwise, update page#. +H2B6C cpy ecde+1 has all code/data been processed? + bcc H2B72 if not. + cmp ecde +H2B72 sta cde save updated values. + sty cde+1 + rts return result (carry set = done). +oplen pha form index to tbl & which 2-bit group. + and #$03 low 2 bits specify group + tay + pla + lsr upper 6 bits specify byte in table + lsr + tax + lda opcodln,x +nxgroup dey is opcode len in lowest 2 bits of acc? + bmi H2B89 branch if it is + lsr shift to next group. + lsr (if length = 0 then error) + bne nxgroup + + .LIST ON + +H2B89 and #$03 + rts if z-set then error * relocation table contains length of each opcode in 2-bit groups @@ -830,20 +833,20 @@ opcodln .HS 0928193C0A280D3C .HS 0A2A193F0A280D3C .HS 0A2A193F0A280D3C -wsize .HS 00 -sgcnt .HS 00 -limlo .HS 0000000000000000 -limhi .HS 0000000000000000 -ofset .HS 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 patch101 php - sei disable interrupts + sei disable interrupts clc - xce full native mode + xce full native mode - phb save DBR + phb save DBR pha pha pea $0000 length of patch @@ -864,39 +867,39 @@ patch101 php pea $0000 length of patch = 0000/0010 pea $0010 >IIGS PtrToHand - plx low word of handle - plb set DBR to handle's bank - lda >1,x get upper 16 bits of 24 bit address - tay save in y - lda 0,x get low 8 bits of address - and #$00FF clear high byte - xba put address in high byte - ora #$005C include JML opcode - sta >GSOS2 store in gsos vectors + plx low word of handle + plb set DBR to handle's bank + lda 1,x get upper 16 bits of 24 bit address + tay save in y + lda 0,x get low 8 bits of address + and ##$00FF clear high byte + xba put address in high byte + ora ##$005C include JML opcode + sta GSOS2 store in gsos vectors clc - adc #$000B - sta >GSOS - tya store upper 16 bits too - sta >GSOS2+2 - adc #$0000 adj for possible page crossing - sta >GSOS+2 - plb remove garbage byte from stack - plb restore DBR. + adc ##$000B + sta GSOS + tya store upper 16 bits too + sta GSOS2+2 + adc ##$0000 adj for possible page crossing + sta GSOS+2 + plb remove garbage byte from stack + plb restore DBR. sec - xce back to emulation mode + xce back to emulation mode plp rts * copy of the code that goes in the handle -L2C4D lda $01,s - sta $07,s - lda $02,s - sta $08,s +L2C4D lda 1,s + sta 7,s + lda 2,s + sta 8,s pla pla pla - lda #$00FF #NoOS + lda ##$00FF #NoOS sec rtl diff --git a/ProDOS.203/ProDOS.S.RAMX.txt b/ProDOS.203/ProDOS.S.RAMX.txt index 3d14f9ec..5acef5a9 100644 --- a/ProDOS.203/ProDOS.S.RAMX.txt +++ b/ProDOS.203/ProDOS.S.RAMX.txt @@ -305,7 +305,7 @@ BITMAP .EQ *-ofsR0 .HS FFFFFFFE VDIR .EQ *-ofsR0 start of vdir. .HS F3 storage type = F, name length = 3 - .AS "RAM" + .AS -"RAM" access .EQ *-ofsR0 .DA #$C3 destroy, rename, read enabled .HS 27 entry length diff --git a/ProDOS.203/ProDOS.S.SEL2.txt b/ProDOS.203/ProDOS.S.SEL2.txt index 558825f4..56967a6e 100644 --- a/ProDOS.203/ProDOS.S.SEL2.txt +++ b/ProDOS.203/ProDOS.S.SEL2.txt @@ -18,7 +18,7 @@ ofsQ .EQ *-dispadr offset to GQuit dispatcher org GQdisp lda RRAMWRAMBNK1 read/write LC bank 1 clc xce 16 bit native mode. - jmp >P8QUIT go to GQuit. + jmp P8QUIT go to GQuit. .DA #0000000000 offset to paragraph boundary. .AS "GQ" id bytes so GQuit can identify this diff --git a/ProDOS.203/ProDOS.S.XDOS.M.txt b/ProDOS.203/ProDOS.S.XDOS.M.txt index c55c23e3..040d43d5 100644 --- a/ProDOS.203/ProDOS.S.XDOS.M.txt +++ b/ProDOS.203/ProDOS.S.XDOS.M.txt @@ -4,9 +4,9 @@ NEW * * allocate buffer in memory tables -alcbuffr .EQ *-ofsX +alcbuffr .EQ *-ofsX ldy #$04 index to user specified buffer. -alcbufr1 .EQ *-ofsX +alcbufr1 .EQ *-ofsX lda (A3L),y this buffer must be on a page boundary. tax save for validation. cmp #$08 @@ -22,7 +22,7 @@ alcbufr1 .EQ *-ofsX inx inx inx -L4DED dex test for conflicts. +L4DED dex test for conflicts. jsr cmembit test for free buffer space and memmap,y P8 memory bitmap bne L4E1E report memory conflict, if any. diff --git a/ProDOS.203/ProDOS.S.txt b/ProDOS.203/ProDOS.S.txt index 092ec45e..918e108f 100644 --- a/ProDOS.203/ProDOS.S.txt +++ b/ProDOS.203/ProDOS.S.txt @@ -1,15 +1,15 @@ NEW AUTO 3,1 - .LIST OFF - .OP 65816 - .OR $0000 - .TF PRODOS203,TSYS + .LIST OFF + .OP 65816 + .OR $0000 + .TF PRODOS203,TSYS *-------------------------------------- - .INB INC/ZP.I - .INB INC/IO.I - .INB INC/MONITOR.I - .INB INC/MLI.I - .INB INC/MLI.E.I + .INB INC/ZP.I + .INB INC/IO.I + .INB INC/MONITOR.I + .INB INC/MLI.I + .INB INC/MLI.E.I *-------------------------------------- MMStartUp .EQ $0202 NewHandle .EQ $0902 @@ -20,10 +20,12 @@ MMShutDown .EQ $0303 ReadTimeHex .EQ $0D03 Int2Hex .EQ $220B TLTextMountVolume .EQ $1201 +*-------------------------------------- .MA IIGS ldx ##]1 jsl $E10000 .EM +*-------------------------------------- P8QUIT .EQ $E0D000 GSOS .EQ $E100A8 GSOS2 .EQ $E100B0 @@ -156,7 +158,7 @@ lcdest .EQ $FF00 * $5D00 sel_1 enhanced quit code (Bird's Better Bye) * $6000 sel_2 GQuit dispatcher support - .PH $2000 + .PH $2000 .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.B @@ -179,7 +181,7 @@ lcdest .EQ $FF00 .INB USR/SRC/PRODOS.203/PRODOS.S.SEL1 .INB USR/SRC/PRODOS.203/PRODOS.S.SEL2 - .EP + .EP *-------------------------------------- MAN SAVE USR/SRC/PRODOS.203/PRODOS.S