From d99a6b6cf409ab94d9fbae8c7483637da9727ef3 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Wed, 16 Oct 2019 17:29:56 -0400 Subject: [PATCH] F_READ and F_WRITE seem to be somewhat working. --- SOFTCARD80.ASM#040000 | 368 ++++++++++++++++++++++++++++++------------ SOFTCARD80.BIN#041000 | Bin 32771 -> 31772 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 269 insertions(+), 99 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index ef908b1..bae020d 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -60,9 +60,10 @@ RVEC7 DEFW 0000H ; Restart vector 7 DMAADDR DEFW 0080H ; DMA address defaults to FILEBUF (0080H) LOGVEC DEFW 0000H ; Vector of logged in drives ROVEC DEFW 0000H ; Vector of read-only drives -USERNUM DEFB 00H ; User number +USERNUM DEFB 00H ; User number TODO: This goes elsewhere ; End of private, implementation dependent space +;TODO: There are two FCBS and the address here is wrong ORG 0060H ; Standard addr of 32 byte FCB FCB1 ; File control block #1 FCB1DRV DEFB 00H ; FCB Drive (0 current, 1 A:, 2 B: etc) @@ -85,37 +86,35 @@ FILEBUF DEFS 128 ; Command args go here too (Pascal string) ; Print signon message using C_WRITESTR PROGSTRT LD DE,WELCOME ; Address of string - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; ; Print the alphabet using C_WRITE - LD B,'A' + LD B,'A' ; First character L1 LD E,B ; Character to print - - LD C,02H ; C_WRITE call + LD C,B_C_WRITE ; PUSH BC ; Preserve B (and C) - CALL BDOS ; CP/M BDOS call + CALL BDOS ; POP BC ; Restore B (and C) - - INC B - LD A,'Z' - CP B - JP Z,S1 - JP L1 + INC B ; + LD A,'Z' ; Last character + CP B ; + JP Z,S1 ; + JP L1 ; ; Loop until there is a keystroke waiting using C_STAT -S1 LD C,0BH ; C_STAT call - CALL BDOS ; CP/M BDOS call +S1 LD C,B_C_STAT ; + CALL BDOS ; CP 0 ; Anything? JR Z,S1 ; If not, loop ; Print a couple of asterisks LD E,'*' ; - LD C,02H ; C_WRITE call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRITE ; + CALL BDOS ; LD E,'*' ; - LD C,2 ; C_WRITE call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRITE ; + CALL BDOS ; ; Create an FCB LD A,1 ; A: drive @@ -143,62 +142,104 @@ S1 LD C,0BH ; C_STAT call LD A,'P' ; Extension LD (FCB1NAM+10),A ; - ; Create a file using ProDOS MLI + ; Create and open a file using ProDOS MLI ; Creates 'A/TESTFILE.TMP' ; Directory 'A' needs to exist already LD DE,CMSG ; Address of string - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; LD DE,FCB1 ; Default FCB address - LD C,16H ; F_MAKE call - CALL BDOS ; CP/M BDOS call + LD C,B_F_MAKE ; + CALL BDOS ; CALL CHECKOK - ; Open the file just created + ; Write to the file (two 128 byte records) - LD DE,OMSG ; Address of string - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD DE,WMSG ; Address of string + LD C,B_C_WRTSTR ; + CALL BDOS ; LD DE,FCB1 ; Default FCB address - LD C,0FH ; F_OPEN call - CALL BDOS ; CP/M BDOS call + LD C,B_F_WRITE ; + CALL BDOS ; + + CALL CHECKOK + + LD DE,FCB1 ; Default FCB address + LD C,B_F_WRITE ; + CALL BDOS ; CALL CHECKOK ; Close the file LD DE,CLMSG ; Address of string - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; LD DE,FCB1 ; Default FCB address - LD C,10H ; F_CLOSE call - CALL BDOS ; CP/M BDOS call + LD C,B_F_CLOSE ; + CALL BDOS ; + + CALL CHECKOK + + ; Open the file + + LD DE,OMSG ; Address of string + LD C,B_C_WRTSTR ; + CALL BDOS ; + + LD DE,FCB1 ; Default FCB address + LD C,B_F_OPEN ; + CALL BDOS ; + + CALL CHECKOK + + ; Read from the file + + LD DE,RMSG ; Address of string + LD C,B_C_WRTSTR ; + CALL BDOS ; + + LD DE,FCB1 ; Default FCB address + LD C,B_F_READ ; + CALL BDOS ; + + CALL CHECKOK + + ; Close the file + + LD DE,CLMSG ; Address of string + LD C,B_C_WRTSTR ; + CALL BDOS ; + + LD DE,FCB1 ; Default FCB address + LD C,B_F_CLOSE ; + CALL BDOS ; CALL CHECKOK ; Delete the file - LD DE,DMSG ; Address of string - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call - - LD DE,FCB1 ; Default FCB address - LD C,13H ; F_DELETE call - CALL BDOS ; CP/M BDOS call - - CALL CHECKOK +; LD DE,DMSG ; Address of string +; LD C,B_C_WRTSTR ; +; CALL BDOS ; +; +; LD DE,FCB1 ; Default FCB address +; LD C,B_F_DELETE ; +; CALL BDOS ; +; +; CALL CHECKOK ; Read keyboard and echo to screen C_READ, C_WRITE -L2 LD C,1 ; C_READ call - CALL BDOS ; CP/M BDOS call +L2 LD C,B_C_READ ; + CALL BDOS ; LD E,A ; Prepare to echo keystroke - LD C,2 ; C_WRITE call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRITE ; + CALL BDOS ; JP L2 ; Forever and ever ; Check an MLI call was successful and print out message accordingly @@ -206,8 +247,8 @@ CHECKOK LD A,(AREG) ; Look at the return code CP 0 ; Success? JP Z,SUCC ; LD DE,FAILMSG1 ; Fail message - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; LD L,A ; Copy to HL for NUM2HEX LD H,0 ; ... LD DE,HEXBUF ; Generate hex string to HEXBUF @@ -215,15 +256,15 @@ CHECKOK LD A,(AREG) ; Look at the return code LD A,0FFH ; 0FFH for error LD L,A ; Return code in L also LD DE,HEXBUF+2 ; Write hex value to console - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; LD DE,FAILMSG2 ; Fail message - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; RET ; SUCC LD DE,SUCCMSG ; Success message - LD C,09H ; C_WRITESTR call - CALL BDOS ; CP/M BDOS call + LD C,B_C_WRTSTR ; + CALL BDOS ; RET WELCOME DEFB 13 @@ -231,15 +272,23 @@ WELCOME DEFB 13 DEFB 13, '$' CMSG DEFB 13 - DEFM 'Creating A/TESTFILE.TMP' + DEFM 'Creating & opening A/TESTFILE.TMP' + DEFB 13, '$' + +WMSG DEFB 13 + DEFM 'Writing record to A/TESTFILE.TMP' + DEFB 13, '$' + +CLMSG DEFB 13 + DEFM 'Closing A/TESTFILE.TMP' DEFB 13, '$' OMSG DEFB 13 DEFM 'Opening A/TESTFILE.TMP' DEFB 13, '$' -CLMSG DEFB 13 - DEFM 'Closing A/TESTFILE.TMP' +RMSG DEFB 13 + DEFM 'Reading record from A/TESTFILE.TMP' DEFB 13, '$' DMSG DEFB 13 @@ -256,28 +305,31 @@ FAILMSG2 DEFM ')' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Implementation of CP/M STYLE BDOS -; Function to invoke is passed in C -; C=00H C_TERMCPM System reset -; C=01H C_READ Console read -; C=02H C_WRITE Console write -; C=07H GET_IOB Get IOBYTE -; C=08H SET_IOB Set IOBYTE -; C=09H C_WRITESTR Console write string -; C=0BH C_STAT Console status -; C=0CH S_BDOSVER Return version number -; C=0DH DRV_ALLRESET Reset disks -; C=0EH DRV_SET Select disk -; C=0FH F_OPEN Open file -; C=10H F_CLOSE Close file (IN PROGRESS) -; C=13H F_DELETE Delete file -; C=16H F_MAKE Create file (IN PROGRESS) -; C=17H DRV_LOGVEC Return bitmap of logged-in drives -; C=19H DRV_GET Return current drive -; C=1AH F_DMAOFF Set DMA address -; C=1CH DRV_SETRO Software write-protect current drive -; C=1DH DRV_ROVEC Return bitmap of read-only drives -; C=20H F_USERNUM Get/set user number -; C=25H DRV_RESET Selectively reset disk drives +; Function to invoke is passed in C, as follows: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +B_C_TERMCPM EQU 00H ; System reset +B_C_READ EQU 01H ; Console read +B_C_WRITE EQU 02H ; Console write +B_GET_IOB EQU 07H ; Get IOBYTE +B_SET_IOB EQU 08H ; Set IOBYTE +B_C_WRTSTR EQU 09H ; Console write string +B_C_STAT EQU 0BH ; Console status +B_S_BDOSVER EQU 0CH ; Return version number +B_DRV_ALLRST EQU 0DH ; Reset disks +B_DRV_SET EQU 0EH ; Select disk +B_F_OPEN EQU 0FH ; Open file +B_F_CLOSE EQU 10H ; Close file +B_F_DELETE EQU 13H ; Delete file +B_F_READ EQU 14H ; Read file +B_F_WRITE EQU 15H ; Write file +B_F_MAKE EQU 16H ; Create and open file +B_DRV_LOGVEC EQU 17H ; Return bitmap of logged-in drives +B_DRV_GET EQU 19H ; Return current drive +B_F_DMAOFF EQU 1AH ; Set DMA address +B_DRV_SRO EQU 1CH ; Software write-protect current drive +B_DRV_ROVEC EQU 1DH ; Return bitmap of read-only drives +B_F_USERNUM EQU 20H ; Get/set user number +B_DRV_RESET EQU 25H ; Selectively reset disk drives ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG BDOSADDR @@ -286,6 +338,7 @@ BDOSINIT LD SP,STCKTOP ; Initialize SP LD A,0 ; LD (IOBYTE),A ; Initialize IOBYTE LD (CURDRV),A ; Drive A: + LD (FILEBUF),A ; Zero chars in command tail LD (FRN1),A ; Initialize FRNs to zero LD (FRN2),A ; ... LD (FRN3),A ; ... @@ -330,8 +383,8 @@ BDOSVEC DEFW C_TERMCPM ; C=00H DEFW UNIMP ; C=11H (F_SFIRST) DEFW UNIMP ; C=12H (F_SNEXT) DEFW F_DELETE ; C=13H - DEFW UNIMP ; C=14H (F_READ) - DEFW UNIMP ; C=15H (F_WRITE) + DEFW F_READ ; C=14H + DEFW F_WRITE ; C=15H DEFW F_MAKE ; C=16H DEFW UNIMP ; C=17H (F_RENAME) DEFW DRV_LOGVEC ; C=18H @@ -520,17 +573,17 @@ FOS5 LD (FOIOB),A ; Record the buffer index in local var CP 3 ; Is it 3? ... JP Z,FOS8 ; ... yes JP FOS9 ; Must be 4 -FOS6 LD A,(FOMLIN) ; - LD (FRN1),A ; +FOS6 LD A,(FOMLIN) ; IOBUF1: Store file ref number in FRN1 + LD (FRN1),A ; ... JP FOS10 ; -FOS7 LD A,(FOMLIN) ; - LD (FRN2),A ; +FOS7 LD A,(FOMLIN) ; IOBUF2: Store file ref number in FRN2 + LD (FRN2),A ; ... JP FOS10 ; -FOS8 LD A,(FOMLIN) ; - LD (FRN3),A ; +FOS8 LD A,(FOMLIN) ; IOBUF3: Store file ref number in FRN3 + LD (FRN3),A ; ... JP FOS10 ; -FOS9 LD A,(FOMLIN) ; - LD (FRN4),A ; +FOS9 LD A,(FOMLIN) ; IOBUF4: Store file ref number in FRN4 + LD (FRN4),A ; ... JP FOS10 ; FOS10 LD A,0 ; Success LD L,A ; Copy to L @@ -553,16 +606,21 @@ FOIOB DEFB 0 ; Local variable to record IOBUF idx ; Close file ; DE is the address of the FCB describing the file to close ; Returns error codes in A and L: -F_CLOSE - LD H,D ; Pointer to FCB ... +F_CLOSE LD H,D ; Pointer to FCB ... LD L,E ; ... into HL LD BC,14 ; Offset to S2 field (reserved field) ADD HL,BC ; Compute address LD A,(HL) ; Obtain file reference num from FCB S2 + LD (FCMLIN),A ; Store in parameter list LD HL,FCMLI ; Pass address of 6502 JSR instruction CALL PRODOS ; Invoke ProDOS MLI CP 0 ; See if there was an error JP NZ,FCERR ; Handle error + + ; + ; TODO - SET THE APPROPRIATE FRN[1234] TO ZERO TO FREE BUFFER + ; + LD L,A ; Return in L also RET FCERR LD A,0FFH ; 0FFH for error @@ -597,6 +655,87 @@ FDMLI DEFB 20H,00H,0BFH ; JSR $BF00 in 6502 code FDMLIPL DEFB 1 ; ProDOS PL: Seven parameters FDMLIP DEFW PATHLEN+OFFSET ; ProDOS PL: Pointer to path in 6502 addr +; Read next record +; DE is the address of the FCB describing the file from which to read +; Returns error codes in A and L: +; 0 OK, 1 EOF, 9 invalid FCB, 10 media changed, 0FFH h/w error +F_READ LD H,D ; Pointer to FCB ... + LD L,E ; ... into HL + LD BC,14 ; Offset to S2 field (reserved field) + ADD HL,BC ; Compute address + LD A,(HL) ; Obtain file reference num from FCB S2 + LD (FRMLIN),A ; Store in parameter list + CALL GETIOADDR ; Get I/O address + CP 0FFH ; See if it was an error + JP Z,FRERR ; If so, abort + LD BC,OFFSET ; Convert to 6502 address + ADD HL,BC ; ... + LD (FRMLIDB),HL ; Store I/O buffer address in parm list + LD HL,FRMLI ; Pass address of 6502 JSR instruction + CALL PRODOS ; Invoke ProDOS MLI + CP 0 ; See if there was an error + JP NZ,FRERR ; Handle error + LD L,A ; Return code in L also + RET ; Done +FRERR LD A,0FFH ; TODO: All errors are 0FFH for now + LD L,A ; Return code in L aslo + RET ; Done (error) + +FRMLI DEFB 20H,00H,0BFH ; JSR $BF00 in 6502 code + DEFB 0CAH ; ProDOS READ call + DEFW FRMLIPL+OFFSET ; Pointer to parm list in 6502 addr space + DEFB 60H ; RTS in 6502 code +FRMLIPL DEFB 4 ; ProDOS PL: Four parameters +FRMLIN DEFB 0 ; ProDOS PL: File reference number +FRMLIDB DEFW 0000H ; ProDOS PL: Data buffer +FRMLIRC DEFW 128 ; ProDOS PL: Request count (bytes to read) +FRMLITC DEFW 0000H ; ProDOS PL: Number of bytes transferred + +; Write next record +; DE is the address of the FCB describing the file to which to write +; Returns error codes in A and L: +; 0 OK, 1 dir full, 2 disk full, 9 invalid FCB, 10 media changed, 0FFH h/w error +F_WRITE LD H,D ; Pointer to FCB ... + LD L,E ; ... into HL + LD BC,14 ; Offset to S2 field (reserved field) + ADD HL,BC ; Compute address + LD A,(HL) ; Obtain file reference num from FCB S2 + LD (FWMLIN),A ; Store in parameter list + CALL GETIOADDR ; Get I/O address + CP 0FFH ; See if it was an error + JP Z,FWERR ; If so, abort + LD BC,OFFSET ; Convert to 6502 address + ADD HL,BC ; ... + LD (FWMLIDB),HL ; Store I/O buffer address in parm list + +; DEBUG ------------------------------------------- +; LD DE,HEXBUF ; Generate hex string to HEXBUF +; CALL NUM2HEX ; ... +; LD DE,HEXBUF ; Write hex value to console +; LD C,B_C_WRTSTR ; +; CALL BDOS +; END DEBUG --------------------------------------- + + LD HL,FWMLI ; Pass address of 6502 JSR instruction + CALL PRODOS ; Invoke ProDOS MLI + CP 0 ; See if there was an error + JP NZ,FWERR ; Handle error + LD L,A ; Return code in L also + RET ; Done +FWERR LD A,0FFH ; TODO: All errors are 0FFH for now + LD L,A ; Return code in L aslo + RET ; Done (error) + +FWMLI DEFB 20H,00H,0BFH ; JSR $BF00 in 6502 code + DEFB 0CBH ; ProDOS WRITE call + DEFW FWMLIPL+OFFSET ; Pointer to parm list in 6502 addr space + DEFB 60H ; RTS in 6502 code +FWMLIPL DEFB 4 ; ProDOS PL: Four parameters +FWMLIN DEFB 0 ; ProDOS PL: File reference number +FWMLIDB DEFW 0000H ; ProDOS PL: Data buffer +FWMLIRC DEFW 128 ; ProDOS PL: Request count (bytes to read) +FWMLITC DEFW 0000H ; ProDOS PL: Number of bytes transferred + ; Create (and open) file ; DE is the address of the FCB describing the file to create ; Returns error codes in A and L: @@ -606,9 +745,7 @@ F_MAKE CALL MAKEPATH ; Populate PATHLEN and PATH CALL PRODOS ; Invoke ProDOS MLI CP 0 ; See if there was an error JP NZ,FMERR ; Handle error -;;;; CALL F_OPEN ; Open the file using same FCB (DE ptr) - LD A,0 ;;; TEMP DEBUG - SHOULD CALL F_OPEN ABOVE ;;; - LD L,A ; Return code in L also + CALL F_OPEN ; Open the file using same FCB (DE ptr) RET FMERR LD A,0FFH ; 0FFH for error LD L,A ; Return code in L also @@ -743,6 +880,36 @@ MPS3 ; EXTENSION LD (PATHLEN),A ; ... RET +; Find IOBUF address for a file reference number +; Scan through FRN1, FRN2, FRN3, FRN4 to find the file reference number in A +; If found, return A=0, HL=I/O buffer address +; If not found, return A=0FFH +GETIOADDR LD A,B ; Stash A + LD A,(FRN1) ; Does it match FRN1? + CP B ; ... + JP Z,GIOAS1 ; ... + LD A,(FRN2) ; Does it match FRN2? + CP B ; ... + JP Z,GIOAS2 ; ... + LD A,(FRN3) ; Does it match FRN3? + CP B ; ... + JP Z,GIOAS3 ; ... + LD A,(FRN3) ; Does it match FRN4? + CP B ; ... + JP Z,GIOAS3 ; ... + LD A,0FFH ; No match, return A=0FFH + RET ; ... +GIOAS1 LD HL,IOBUF1 ; Address of I/O buf 1 -> HL + JP GIOAS5 ; ... +GIOAS2 LD HL,IOBUF2 ; Address of I/O buf 2 -> HL + JP GIOAS5 ; ... +GIOAS3 LD HL,IOBUF3 ; Address of I/O buf 3 -> HL + JP GIOAS5 ; ... +GIOAS4 LD HL,IOBUF4 ; Address of I/O buf 4 -> HL + JP GIOAS5 ; ... +GIOAS5 LD A,0 ; Success! + RET + ; Convert value in HL into an HEX ASCII string, pointed to by DE ; Courtesy of http://map.grauw.nl/sources/external/z80bits.html#5.2 NUM2HEX LD A,H @@ -793,10 +960,13 @@ HEXBUF DEFB 0,0,0,0,'$' ; IOBUF4 $B700-$BAFF ORG 7000H ; Set to 7000H by experiment ... -IOBUF1 DEFS 1024 ; ... we need BASIC.SYSTEM for now since we use EXEC! -IOBUF2 DEFS 1024 -IOBUF3 DEFS 1024 -IOBUF4 DEFS 1024 +IOBUF1 DEFM 'Mary had a little lamb' + ORG 7400H +IOBUF2 DEFM 'His fleece was white as snow' + ORG 7800H +IOBUF3 DEFM 'And everywhere that Mary went' + ORG 7C00H +IOBUF4 DEFM 'That sheep was sure to go' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 4618428aee04933c24c3da7c49e759945872dfa2..bafa95782c0f5177ce09f1072cae26170d3bbd8c 100644 GIT binary patch delta 1159 zcmZWmTWAz#6h1Q(W0K06!5B4Z%RfntBrV#`gAda>MexBsv{orip)L6@JIO9?cH->R zO)zm+TIdA|S>~zWL-nChLa`7ZvQ?>OVChaAA%Y-k6x0V5AB0|%TxR`ecGnd;1Lr$@ z-?{zge4Q6hJ`>t104`u|-YT>$i*JigvoMp;d3>*VM!3-V}#+FYZ!T6d=# zYI{xnwLxvHQS%L|qelHdF(&x$u7jbN$Rpgxg0}ui0NxH!enpCAGW$Rdn17P#6;pKaq>(9;PDK+jg_>EeqMCW8K}1+2V}7nEjb z{it_1`S53a3YT!9_TR?$@B{Auhb7WRwvc{ui-a1`*XbagrUhK27w9F9CHjQh0+#=Y zAaq3*m2sx=P;&_{ZgL+u|Kh&fcEU%~!QDal63YG?Oj~ArNe76w65=4yRzn;j+FFPs z#Px^*W4hp`ING`x;kYhEIH@U=wHDRNfo&T8FR3mqNIayTV|KmWRR1WUyX@UL3-xLP5~)36_J z_cwVFcsV$N1>o;eI%rjFr!T}y-8l;j#Z0}#$J8e*sCfHm^n`;{*7x1v)6b~qSWKjcdzX~+ z?0A5@FIdY&(B^&4T1xq)ENtjq>UH;WPA#(XIKTOvcY^Vg&w1Z6e(^c)$2#bhGQYR` z6XVy8?094+xz(XO>Cdo9{|uY*X9PC;jDEJE^Fv}ypah8{f>KG_P8ldgM(OM+@safE z{$vIXrwoG`C`&RZn@HLQ;!Y-QW_iSY>9xJ-I5LhJ) UCn1+f7{*vsB=c1mXQC1FIa{K;H~;_u delta 817 zcmYjNT}TvB82#>DoBcti9js+tdvJC`P$=v|FM|#AAi7$<)I&kxy?3NAiA@bu+S~;p zqK5^UUV?sJBa4cq9_k@;K%237P>_reg7QH^D1uldX1lYyy3H`(Ih^y|@7!#F_zb5t9rD#nWs!L5(Nk#$(Wh|=o z7HPqs9youHa=Y4?X#=I-aJRT#&M2piYU*sHYTC*)Hjm(T^A%RiXSmtCi<^r-aQvd# z8JNi(D`#{d0U!-PdJNKQkhDSi3^fnQ7^ncrI3yEdH#Ft7uNJ7q4B=6>FfdhO})B?@&f?PX%ry>+glMYH2 zU1_p5%@S?PC7HOF4%T5NHnZKQT*HCbrG31>v_2n)n6<=IxTYg(Sm1RX zS8!4fR4}VIkadP28cwdUHFcS}_xOqj3rkG<#P|r3Av~e2GY>hBn1`LmEawHBm&|(O z`{M6dR)zHLlJqX=^N9`_+rMQiy!)^^N(0h3h^IPsTK(mRiL7n5*Y&Y9N)d>qRGC-J z2;Vc`9~`47Cyo2|(VE@C|I3&^K1PGmxFs@>AJh>CTWbJ&`%DaMDKBW37hb*0m!l^Z z&T}mRFGvDxIW+4FSGd+9gch(ngm}X%JGVGFBnJ3j0_H@kXn0~qjh61$+@G~LPlAU2 zoP-P+^O4ks8aAfAR_8kpO?eUL8xJk!HzuGlwUM%Hp%KZjvu=rJ-M{>%z~Y>7uCdq| HC`SJQp5QEX diff --git a/zapple2.po b/zapple2.po index 45883a2bc7b60f2789862a2c552d630fbb88126f..d782d8b00f982e89aedb29cbae9409f4b7d7a135 100644 GIT binary patch delta 46531 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 Htmpm@@*8lo delta 6039 zcmeHKeQ+Da6~8;n_N`(GyZJJ9rmXD5wt`}G=a3KC81!+nlvt9{$$>Bo)=8F$8%GL~ z+$3#?++l_ULQFz}w{%LHwo}4Dpp>LsLjVWFK8HXh<9y5}#XOU@Hzb7&vyho%!>fOsKKCl3~s;+JIx4 z<&Zbxc7{F6?9DEJkTLiTE~aFN>1t%m6jn(GyOq+PHZaqW&5_$9h6zIzyz+-@?6rM78%GF~Pd^}~~N(`mD zS?C%D!+|Dn)2D>kowm!ty zFQJ0|pc^4qQH9gict@jVx~o840fReivOtM++$oU#5AmKByQ^qQjyNNi=W_WD{+=5z z<)dctYbI+VckSS7R*B%lg-BhNO_K>Cn@%X%1Xgfg|3Cr{X8MzNc03GgIZB()pqUqR2Cf(ER70z&xH2BeX16b~`^eE<$kHM#(WCF}2{>0u zmlX+e^DchQ47yK16--prChEJ=iC)sLr9w;5FOSqIMJ~@XlZk})ppYmOmp3dqJ(oA9 zm-nE>Gp20|!tUf|lKQk^F0nqs&t+NSe1xCmN@*64j_lzPYbC}#{5kGCOUfSQ*X61? zGny!6s-lc}4)haaY?XL{bWMS@@&c){KmhjiM5|kRR!X@)m=uNIaalWBa23OEBWOJUqzl7;jblopiw^^;b(`4o$&WP z@e%)2<7Ebvm>)%FuY3#t_yaVHupgq@TVO#7h2;v1R2xByuDHV8PtYw_EPRHbP%X`8 zy5GGnB(%^S3&Q|vqy>Sz@))wxgcsHQk0CFcqlMxoyWNK|l;VgK4!FAlFveKkl*uO6 z;dCOC$m$?L2Wi_>gMdgXnMpx)0nNQSNYp`EQU3yHL%Khk&{0b%szZwOK1d%8ZC4%X^+!K6DiU-v(gRkDK_ z9p~2U_Ru3|m89t;>wbvl=CnY0C==>j50ve&1m0mBrV+xu{h74|1yT{Cu{Be2VjvOM zLAnty#dv!{T~e^%3l6PMB=uU|=rGkWeAeBjcr9_Kv zp-_-C5f69)CxUh!T*Af@T|z6ZMHBiNLM0mTB}BA!q~Yicb*z%yAVpq%9MuodSP9zd zP$n#NL0>qL9ZV;2d@!9(Bq1K@{%`9$LU0z`4LCzyua2gx?Fl%s(%TEWP!F!4tqxTR z!3~EfkleZ#HO$p4POVNjq{2?NN<$9O*r=bXke1}d z!)U%HPnr*-1-U-p55Q@j)(*y2n$xW~67qy_FmxM^_$2HOc_g4Z3Dl@`i%~J;+fjalVYK7cs;OjM?O+m(i??xGmGU zb+3GZyLcMcC)mGo2Ge|}la{;PZpbCvWVZ=6(bi(sCr(>H65A+RQ!3b@3X)dV7$koj zMN;9tp|%aiv;COxNf?$8%vGFT>{Qtul}Xfc!*UkgfB7Y zg!8F(Ml4}O10#0CMPFR>$Hf(K%MepHhp{kBT{Tlz!{ixu)1>v}aMaQkJ#HyuP_VwQ z|C7g~d!za2aN+-M^!@0EF#da#QOcEBN`vw{h4Rj6ZFOuo>WoP-KlH)aMrenln`6V~ zg7AYHVVLZG3-y%cqbFwOKO~>Og&J~o3V7Dek-&8Ej`gS(o4}G?s)B26=C0f6^-5{P)Sf&!yy{)`$Ij&4R7CSM?y!NKz zct?q?Wz7uQ;5emBvg1EeCb{t^mE2^>_%D?Fi+6!uQ>1*2P^2Hok@*RFEKNE z?BqSslClf~KV9t>%V*RW*gC6Bp?>}OJyDi{NmooS3sF<+gXjfTu|1JE&HAAx4$Gaa1gixBpz^<7O_l zw*EZ}if@_3;~&KMO_Rp)Gco>+q4zd074`4c=f{91mc_?5PkbKRJn^5{z0i}V-$C6Y zAEAR!oI;%XlXBx-Wg`cS`_=C}Yy7uC+l})M9;h~Z^<_L)u|_fF)BKFnoo^6BIHCR~PAa$!#&g^{(3sA2V=C)fMTK zmM>8jPp4>EPBR^{b;n_&N3DLvIGf#lpkkg1-whv^PEC4>Wco6R-+ip&zf%BC101a6 a{>ENyuEyZ%KDe3&S4+YFb0vf`vHO3JP7;;?