;XMDPW6.ASM -- 7/10/88 ; by Phil Wheeler -- 71266,125 ; ; This version adds device access for files to XMDPW5 of 11/29/88 ; ; 7/10/88: Better error trapping on dow to RAM and integral ; checksum capability via SHIFT-F2 while on line ; ;based on M-100 XmodemXtend/ Copyright (C)1985 by J R Chenoweth ; ; Define F6 in Basic to call the address 27 bytes above TOP ; of XMDPW6.CO: Key 6, "Term"+chr$(24)+"CallXXXXX"+chr$(13) where XXXXX ; is TOP+27. ; ; ; ROM calls ; restak equ $5d5d finddo equ $20a0 ;find do file in RAM dir errtrp equ $f652 cls equ $4231 ;clear screen waitsp equ $5f2f ;wait for press of spcbar ntfnd equ $5cd6 ;not found msg maxfil equ $7f2b ;$9be1 null equ 7 ;7 (point to 0) open equ $4d12 ;$5bd1 select equ $4cbf ;$5b7e readio equ $4e7a ;$5d36 writio equ $4b44 ;$5a05 close equ $4e27 closei equ $4d38 devout equ $fc8c ;$f73f setmax equ $3f2f Rflptr equ $2146 ;11362 GetLen equ $21fa ;11587 FmtFnm equ $4c0b ;23242 chkf equ $5aab faddr equ $5ae3 beep2 equ $7662 sndchr equ $6E32 ABTMSG EQU $5771 BEEP EQU $4229 CALMSG EQU $5244 CAPTUR EQU $FAC2 CHGET EQU $12CB CHSNS EQU $13DB CLSCOM EQU $6ECB CONECT EQU $52E4 CONVD EQU $39D4 CRLF EQU $4222 CUROFF EQU $424E CURSON EQU $4249 DIALER EQU $532D DIRRST EQU $2146 DISCON EQU $52BB DISMSG EQU $5786 DWNLDR EQU $568F DWNMSG EQU $5768 DSPFNK EQU $42A8 DUPDSP EQU $5544 DUPLEX EQU $553E DUPFLG EQU $F658 ECHDSP EQU $5556 ECHOTG EQU $5550 FILENG EQU $21FA FNTFND EQU $577C FILES EQU $1F3A FNDTBL EQU $5D2B FNAME EQU $4C0B FNKSB EQU $5A9E FRERAM EQU $7EAC GTXTTB EQU $5AE3 INPLIN EQU $4644 INPRMP EQU $463E KEYDSP EQU $F789 KEYX EQU $7270 KILASC EQU $1FBE EVALEX EQU $112E L3457 EQU $3457 L45D3 EQU $45D3 L56C5 EQU $56C5 PRTBUF EQU $5A58 FNDFL0 EQU $5AA6 FNDTXT EQU $5C3F INCRDE EQU $5C6D CHKBYT EQU $5C74 L5CAE EQU $5CAE L5DB1 EQU $5DB1 L5DBC EQU $5DBC L5DC5 EQU $5DC5 L6370 EQU $6370 L6383 EQU $6383 L6CA7 EQU $6CA7 CHKBK2 EQU $729F PRTCHR EQU $4B44 CALPPS EQU $F62B LF650 EQU $F650 LF659 EQU $F659 COMLF EQU $F65A LF67B EQU $F67B LF7D9 EQU $F7D9 LFAC3 EQU $FAC3 LFAC6 EQU $FAC6 ENDLCD EQU $FF40 XONOFF EQU $FF42 MAKHOL EQU $6B6D MAKTXT EQU $220F MENU EQU $5797 CHGDSP EQU $556B PREV EQU $5523 PRTNUL EQU $27B1 PRTMSG EQU $5791 PRTTAB EQU $4B55 RCVX EQU $6D6D RTNADR EQU $F652 RV232C EQU $6D7E SD232C EQU $6E32 SNDCOM EQU $6E3A SERPRM EQU $F65B SETDSP EQU $42A5 SETFNK EQU $5A7C SETSER EQU $17E6 STKINI EQU $5D53 STKSET EQU $5D5D UNLOCK EQU $4244 UPCASE EQU $0FE9 UPLDR EQU $55A0 UPLMSG EQU $5759 WAIT EQU $551D WATDSP EQU $5562 SCLFLG EQU $F63E SCLHLT EQU $423F CTRLQ EQU $6E0B ;code starts here ; ; prt ORG 58490 ;puts just under MAXRAM BEGIN NOP ;start of main pgm ; ENT BEGIN LE800 mvi a,1 ;maxfiles=1 call maxfil call setmax LXI H,LF2F5 CALL PRTMSG LE806 CALL UNLOCK LXI H,LE87B CALL SETDSP JMP LE8D0 ;*** HILBL POP H ;DIRACC exit from Basic (F6 call in Basic) INR L CALL $2C63 CALL $4231 JMP LE9E9 ;*** SCROLL call f6chk ;check for SHIFT -> DIRACC to BASIC if pressed LDA SCLFLG ;scroll toggle code CPI $00 JNZ UNLOCK CALL SCLHLT JMP CTRLQ ;*** LE812 CALL BEEP LXI H,LE87B CALL SETFNK LE81B CALL STKINI CALL LEFB4 ;run this from XMDHAZ at entry CALL LEFA0 ;ditto! LXI H,LE812 SHLD RTNADR LXI H,LE842 CALL PRTMSG CALL INPLIN RST 2 ANA A JZ LE81B LXI D,LE850 CALL L6CA7 JZ LE812 RET ;*** LE842 DM XMDcommand: DB 0 ; LE850 DM STAT DW STAT DM TERM DW TERM DM CALL DW CALL DM FIND DW FIND DM MENU DW MENU DM FILE DW FILE DM FREE DW FREE DB $FF ; LE87B DM Find DB $80 DM Call DB $80 DM Stat DB $80 DM Files DB $8D DM Free DB $8D DB $80 DM Term DB $8D DM Menu DB $8D DM JRC37 ; FILE CALL DIR JMP LE81B ;*** FREE CALL FRE JMP LE81B ;*** LE8B4 DM Serial Port Status: DB 0 STAT DCX H RST 2 INR A DCR A JNZ LE8FC LE8D0 LXI H,LE8B4 CALL PRTMSG LXI H,SERPRM MVI B,$05 LE8DB MOV A,M RST 4 INX H DCR B JNZ LE8DB MVI A,$2C RST 4 LDA CALPPS RRC MVI A,$32 SBB B RST 4 LXI H,LE8F6 CALL PRTNUL JMP LE81B ;*** LE8F6 DM 0 pps DB 0 LE8FC JC LE90D CPI $2C JZ LE919 CALL UPCASE CPI $4D JNZ LE812 INX H LE90D CALL SETSER CALL CLSCOM DCX H RST 2 ANA A JZ LE81B LE919 RST 1 INR L CALL EVALEX CPI $14 JZ LE929 SUI $0A JNZ LE812 INR A LE929 STA CALPPS JMP LE81B ;*** LE92F LXI H,CALMSG CALL PRTBUF POP D CALL LE98A JZ LE812 XCHG DB $F6 CALL STC PUSH H LXI H,CALMSG CC PRTBUF POP H CALL DIALER JC LE812 JNZ LE81B JMP LE9E9 ;*** FIND SUB A CALL L5DB1 PUSH H CALL FNDFL0 JZ LE812 CALL GTXTTB XCHG POP H LE963 CALL FNDTXT JNC LE812 PUSH H PUSH D CALL L5DC5 CALL LE98A CNZ LE998 CALL CRLF CALL LE9BA JZ LE812 CPI $43 JZ LE92F POP D CALL INCRDE POP H JMP LE963 ;*** LE98A CALL LE9AE RZ RST 4 CPI $3A INX D JNZ LE98A JMP LE9B4 ;*** LE998 CALL LE9AE RZ CPI $3C JZ LE9A9 CPI $3A RZ RST 4 INX D JMP LE998 ;*** LE9A9 RST 4 MVI A,$3E RST 4 RET ;*** LE9AE CALL CHKBYT DCX D LDAX D RZ LE9B4 CPI $1A JZ LE812 RET ;*** LE9BA PUSH D LXI H,FNDTBL CALL SETFNK CALL L5CAE PUSH A LXI H,LE87B CALL SETFNK CALL L5DBC POP A CPI $51 POP D RET ;*** TERM LXI H,COMLF ;entry poiint from XMDHAZ.100 RST 2 CNC L3457 PUSH A CALL SETSER POP A CMC CC CONECT JC LEAD3 CALL LEFA0 LE9E9 MVI A,$40 STA LF650 STA LF67B XRA A sta jy224 ;split screen mod STA CAPTUR STA LFAC3 CALL L45D3 MVI A,$FF STA Bfr+12 CALL LF038 TRMCON CALL LF021 CALL DUPDSP CALL ECHDSP CALL WATDSP LEA0F CALL DSPFNK CALL CURSON ;LEA15 CALL LEF93 ;nop's keep addresses same nop nop nop LEA18 CALL STKSET LXI H,LEA7C SHLD RTNADR LDA XONOFF ANA A JZ LEA33 LDA ENDLCD LXI H,LF7D9 XRA M RRC CC WATDSP LEA33 CALL CHSNS JZ LEA4F CALL CHGET JC LEA89 MOV B,A LDA DUPFLG ANA A MOV A,B CZ PRTCHR cpi 128 ;macro cut-out cnc macro push a ;split screen mod call jy200 pop a ANA A CNZ SD232C JC LEA6F LEA4F CALL RCVX JZ LEA18 CALL RV232C JC LEA18 PUSH A ANI $7F RST 4 POP A MOV B,A LDA LF659 ANA A MOV A,B CNZ PRTTAB CALL L56C5 JMP LEA18 ;*** LEA6F XRA A STA ENDLCD LEA73 CALL CHKBK2 JC LEA73 JMP LEA18 ;*** LEA7C CALL BEEP XRA A STA LF659 CALL ECHDSP JMP LEA18 ;*** LEA89 MOV E,A MVI D,$FF LHLD Bfr+16 DAD D DAD D MOV A,M INX H MOV H,M MOV L,A LXI D,LEA18 PUSH D PCHL ; LEA9A DW jy129 DW f2chkd DW UPLD DW DUPLEX DW ECHOTG DW SCROLL DW XMDM DW BYEBYE ; LEAAA DM Pre DB $F6 DM Dow DB $EE db ' U' DB $F0 DB $80 DB $80 DB $80 DM Xmo DB $E4 db ' By' DB $E5 ; BYEBYE LXI H,DISMSG CALL LEFCF CPI $59 JZ LEAD3 LXI H,ABTMSG CALL PRTMSG JMP LEA18 ;*** f2chkd lda $ff99 ;check for shift pressed rar jnc dnld ;DNLD if not jmp check ;Checksum if yes ;*** jy129 lda $f63d ;new prev !!! ora a jz $5523 ;label on? lda $ff99 rar jnc $5523 ;shift? lxi h,jy224 inr m mov a,m rar jnc $42ab cmc jmp jy215 ;*** LEAD3 XRA A STA LF650 MOV L,A MOV H,A SHLD CAPTUR CALL CLSCOM CALL CUROFF CALL DISCON CALL L6370 JMP LE806 ;*** XMDM call f7chk ;check for SHIFT -> DIRACC to BASIC if pressed LDA CAPTUR ORA A CNZ LEFED LXI H,FRE SHLD Bfr+16 LXI H,LEB07 CALL SETFNK LDA Bfr+12 CALL LEB48 JMP LEA0F ;*** LEB07 DM Pre DB $F6 DM Sen DB $E4 DM Rec DB $F6 DM Fil DB $E5 DM Fre DB $E5 DB $80 DB $80 DM Nor DB $ED ; DW jy129 DW f2chkx DW XRCV DW DIR DW FRE DW SCROLL DW CRCTOG DW TRMCON ; link 0:xmd61b