MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 1 CMEX MAC 14 Mar 89 23:59 2 page 60 3 4 ;Autor Wilfried Schmitten, Heidebloeck 16, 2 Hamburg 74 5 ;letzte Aenderung : 30.1.1989 6 7 ; Benutzt AUXIN und AUXOUT 8 ; Waehlroutinen fuer Smartmodem eingebaut 9 ; Abbruch der Waehlroutinen mit ~C = no connection 10 ; ~X = no answer fuer Wahlwiederholung 11 ; Automatische Baudrateneinstellung fuer Wahl aus der Phone.lib 12 ; setze default Device in defdev: unten 13 14 ; 2 kleine Besonderheiten des verwendeten Assemblers 15 ; defz wie db mit zus{tzlichem byte 0 am Stringende 16 ; defc wie db , aber letztes bytes mit bit 7 = 1 17 18 000A 19 REV: EQU 10 20 21 0000 22 NO: EQU 0 FFFF 23 YES: EQU NOT NO 0000 24 test: equ no ;yes fuer Test mit ZSID FFFF 25 grip: equ yes 003C 26 speed: equ 60 ;cpu speed in MHz x10, 25.5 MHz max. 27 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc. 0050 28 dpuls: equ 'P' ;T=tone- P=pulse dialing 29 30 save macro 31 push bc 32 push de 33 push hl 34 endm 35 36 restore macro 37 pop hl 38 pop de 39 pop bc 40 endm 41 42 ; 43 ; MEX service processor stuff 44 ; 0D00 45 MEX EQU 0D00H ;address of the service processor 46 00FF 47 INMDM EQU 255 ;get char from modem to A, CY=no char in >100 ms 00FE 48 TIMER EQU 254 ;delay 100ms * reg B 00FD 49 TMDINP EQU 253 ;B=# 10 secs to wait for char, cy=no char !! 00FC 50 CHEKCC EQU 252 ;check for ^C from KBD, Z=present 00FB 51 SNDRDY EQU 251 ;test for modem-send ready 00FA 52 RCVRDY EQU 250 ;test for modem-receive ready 00F9 53 SNDCHR EQU 249 ;send a character to the modem (after sndrdy) 00F8 54 RCVCHR EQU 248 ;recv a char from modem (after rcvrdy) 00F7 55 LOOKUP EQU 247 ;table search: see CMDTBL comments for info 00F6 56 PARSFN EQU 246 ;parse filename from input stream 00F5 57 BDPARS EQU 245 ;parse baud-rate from input stream 00F4 58 SBLANK EQU 244 ;scan input stream to next non-blank 00F3 59 EVALA EQU 243 ;evaluate numeric from input stream MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 2 CMEX MAC 14 Mar 89 23:59 00F2 60 LKAHED EQU 242 ;get nxt char w/o removing from input 00F1 61 GNC EQU 241 ;get char from input, char moving from input 00F0 62 ILP EQU 240 ;inline print 00EF 63 DECOUT EQU 239 ;decimal output 00EE 64 PRBAUD EQU 238 ;print baud rate 0009 65 PRINT EQU 9 ;BDOS/MEX print-string function call 66 0003 67 auxin equ 3 0004 68 auxout equ 4 0006 69 consio equ 6 0007 70 auxinstat equ 7 0008 71 auxoutstat equ 8 000C 72 retvers equ 12 0031 73 sysctrl equ 49 0032 74 bioscall equ 50 0005 75 bdos equ 5 76 0007 77 BELL EQU 7 ;bell 0009 78 TAB EQU 9 000D 79 CR EQU 13 ;carriage return 000A 80 LF EQU 10 ;linefeed 001B 81 ESC EQU 1BH ;escape 82 0100 83 tpa equ 100h 84 0100 85 org tpa 86 ; 87 ; 88 ; Defaulteinstellungen fuer MEX 89 ; ------------------------ FIXED FORMAT AREA ---------------- Addr soll 90 91 ; 0100 0003 92 DEFS 3 ;(for "JMP START" instruction) 0103 00 93 PMODEM: DEFB NO ;yes=PMMI S-100 Modem 103H 94 0104 FF 95 SMODEM: DEFB YES ;yes=HAYES Smartmodem, no=non-PMMI 104H 0105 50 96 TPULSE: DEFB dpuls ;T=tone- P=pulse dialing 105H 97 ;These 3 locations are not referenced 98 ;by MEX 0106 3C 99 CLOCK: DEFB speed 0107 05 100 MSPEED: DEFB 5 ;0=110 1=300 2=450 3=600 4=710 5=1200 107H 101 ;6=2400 7=4800 8=9600 9=19200 default 0108 00 102 BYTDLY: DEFB 0 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms 108H 103 ;default time to send character in ter- 104 ;minal mode file transfer for slow BBS. 0109 00 105 CRDLY: DEFB 0 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H 106 ;default time for extra wait after CRLF 107 ;in terminal mode 010A 06 108 COLUMS: DEFB 6 ;number of DIR columns shown 10AH 010B FF 109 SETFLG: DEFB YES ;yes=user-added Setup routine 10BH 010C FF 110 SCRTST: DEFB YES ;home Cursor clears screen 10CH 010D 00 111 DEFB 0 ;spare 10DH 010E FF 112 BAKFLG: DEFB YES ;yes=change any file same name to .BAK 10EH 010F FF 113 CRCDFL: DEFB YES ;yes=default to CRC checking 10FH 114 ;no = checksum checking 0110 FF 115 TOGCRC: DEFB YES ;yes=allow toggling of CRC to Checksum 110H 0111 00 116 CVTBS: DEFB NO ;yes=convert backspace to rub 111H 0112 FF 117 TOGLBK: DEFB YES ;yes=allow toggling bs/rub 112H MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 3 CMEX MAC 14 Mar 89 23:59 0113 00 118 ADDLF: DEFB NO ;no=no LF after CR to send file in 113H 119 ;terminal mode (added by remote echo) 0114 FF 120 TOGLF: DEFB YES ;yes=allow toggling of LF after CR 114H 0115 FF 121 TRNLOG: DEFB YES ;yes=allow transmission of logon 115H not used 122 ;write logon sequence at location LOGON 0116 00 123 SAVCCP: DEFB NO ;yes=do not overwrite CCP 116H 0117 00 124 DEFB NO ;yes=local command if EXTCHR precedes 117H 125 ;no=external command if EXTCHR precedes 0118 FF 126 DEFB YES ;yes=allow toggling of LOCONEXTCHR 118H 0119 FF 127 LSTTST: DEFB YES ;yes=printer available on printer port 011A FF 128 XOFTST: DEFB YES ;yes=checks for XOFF from remote while 11AH 129 ;sending a file in terminal mode 011B 00 130 XONWT: DEFB NO ;yes=wait for XON after CR while 11BH 131 ;sending a file in terminal mode 011C FF 132 TOGXOF: DEFB YES ;yes=allow toggling of XOFF checking 11CH 011D 00 133 IGNCTL: DEFB NO ;yes=CTL-chars above ^M not displayed 11DH 011E 00 134 EXTRA1: DEFB 0 ;for future expansion 11EH 011F 135 EXITCHR: 011F 05 136 DEFB 'E'-40H ;^E = Exit to main menu 11FH 0120 00 137 BRKCHR: DEFB '@'-40H ;^@ = Send 300 ms. break tone 120H 0121 0E 138 NOCONN: DEFB 'N'-40H ;^N = disconnect from phone 121H 0122 0C 139 LOGCHR: DEFB 'L'-40H ;^L = Send logon 122H not used 0123 10 140 LSTCHR: DEFB 'P'-40H ;^P = Toggle printer 123H 0124 12 141 UNSAVE: DEFB 'R'-40H ;^R = Close input text buffer 124H 0125 14 142 TRNCHR: DEFB 'T'-40H ;^T = Transmit file to remote 125H 0126 19 143 SAVCHR: DEFB 'Y'-40H ;^Y = Open input text buffer 126H 0127 1E 144 EXTCHR: DEFB '^'-40H ;^^ = Send next character 127H 0128 0002 145 DEFS 2 ;unused by MEX 128H 146 012A C3 0217 147 INCTL1: JP INSP ;go input status port 12AH 012D 0007 148 DEFS 7 0134 C3 0223 149 OTDATA: JP OUTDP ;go output data port 134H 0137 0007 150 DEFS 7 013E C3 020B 151 INPORT: JP INDP ;go input data port 13EH 0141 0007 152 DEFS 7 0148 E6 FF 153 MASKR: AND 0ffh ; 148H 014A C9 154 RET ;bit to test for receive ready 014B FE FF 155 TESTR: CP 0ffh ; 14BH 014D C9 156 RET ;value of rcv. bit when ready 014E C3 0230 157 MASKS: JP outsp ;go output status port 14EH 158 ; 0151 FE FF 159 TESTS: CP 0ffh ;bit to test for send ready 151H 0153 C9 160 RET 161 0154 000E 162 defs 14 163 ; 0162 C3 03D3 164 DIALV: JP DIAL ;dial digit in A 162H 0165 C3 01E9 165 DISCV: JP DISCON ;disconnect the modem 165H 0168 C3 01E7 166 GOODBV: JP GOODBY ;called before exit to cpm 168H 016B C3 0242 167 INMODV: JP NITMOD ;Initialization 16BH 016E C3 032F 168 NEWBDV: JP PBAUD ;Change Baudrate 16EH 0171 C9 00 00 169 NOPARV: DB 0C9H,0,0 ; 171H 0174 C9 00 00 170 PARITV: DB 0C9H,0,0 ; 174H 0177 C3 0479 171 SETUPV: JP SETCMD ; 177H 017A 00 00 00 172 DB 0,0,0 ;not used by MEX 17AH 017D C3 01A7 173 VERSNV: JP SYSVER ;Sign On 17DH 0180 C3 01E8 174 BREAKV: JP SBREAK ; 180H 0183 53 49 4F 41 175 defdev: db 'SIOA ' ;6 Zeichen, mit space auffuellen MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 4 CMEX MAC 14 Mar 89 23:59 0189 24 176 db '$' 177 018A 000B 178 ds 11 ;not used 179 180 ; Routine to clear to end of screen. If using CLREOS and CLRSCRN, set 181 ; SCRTEST to YES at 010CH (above). 182 ; 0195 11 0734 183 CLREOS: LD DE,EOSMSG ; 195H 0198 0E 09 184 LD C,PRINT 019A CD 0D00 185 CALL MEX 019D C9 186 RET 187 ; 019E 11 0737 188 CLS: LD DE,CLSMSG ; 19EH 01A1 0E 09 189 LD C,PRINT 01A3 CD 0D00 190 CALL MEX 01A6 C9 191 RET 192 ; 1A7H 193 ; 194 ;----------------------- END OF FIXED AREA ---------------------------- 195 196 ; Sign On Message 197 01A7 198 SYSVER: 199 0000 200 if test 203 endif 204 01A7 CD 023D 205 call ilprint 206 FFFF 207 if grip 01AA 1B 1B 37 30 208 defb esc,esc,'70' ;GRIP ASCII Zeichensatz 209 endif 210 01AE 0D 0A 20 20 211 db cr, lf,' Overlay CPM 3.0 / ' 01C4 36 2E 30 20 212 db speed/10 + '0','.',speed mod 10 + '0',' MHz ' 01CC 20 53 6D 61 213 db ' Smartmodem ( WS V' 214 0000 215 if test 217 else 01DE 31 2E 218 db REV/10+'0','.' 01E0 30 20 29 00 219 defz REV MOD 10+'0',' )' 220 endif 221 01E4 C3 04F7 222 jp aktport 223 ; 224 ; Routine to exit just prior to exit-to-cpm 225 ; 01E7 C9 226 GOODBY: RET 227 ; 228 ; Send break to remote 229 ; 01E8 C9 230 SBREAK: RET ;fehlt noch 231 232 ; Disconnect the modem 233 ; 01E9 234 DISCON: 01E9 06 14 235 ld b,20 01EB 0E FE 236 ld c,timer MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 5 CMEX MAC 14 Mar 89 23:59 01ED CD 0D00 237 call mex ;warte 2 Sekunden 01F0 21 072B 238 ld hl,mbreak1 01F3 CD 0465 239 call send 01F6 06 14 240 ld b,20 01F8 0E FE 241 ld c,timer 01FA CD 0D00 242 call mex 01FD 21 072F 243 ld hl,mbreak2 0200 CD 0465 244 call send 0203 06 01 245 ld b,1 ;notwendig ? 0205 0E FE 246 ld c,timer 0207 CD 0D00 247 call mex 020A C9 248 ret 249 250 251 ; 252 ; Port access routines 253 ; 254 ; Input 255 ; 020B 256 INDP: 257 save 020B C5 A 1 push bc 020C D5 A 2 push de 020D E5 A 3 push hl 020E 0E 03 258 ld c,auxin 0210 CD 0D00 259 call mex 260 restore 0213 E1 A 1 pop hl 0214 D1 A 2 pop de 0215 C1 A 3 pop bc 0216 C9 261 ret 262 263 ; Input status 264 ; 0217 265 INSP: 266 save 0217 C5 A 1 push bc 0218 D5 A 2 push de 0219 E5 A 3 push hl 021A 0E 07 267 ld c,auxinstat 021C CD 0D00 268 call mex 269 restore 021F E1 A 1 pop hl 0220 D1 A 2 pop de 0221 C1 A 3 pop bc 0222 C9 270 ret 271 272 ; 273 ; output 274 ; 0223 275 OUTDP: 276 save 0223 C5 A 1 push bc 0224 D5 A 2 push de 0225 E5 A 3 push hl 0226 0E 04 277 ld c,auxout 0228 5F 278 ld e,a 0229 CD 0D00 279 call mex MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 6 CMEX MAC 14 Mar 89 23:59 280 restore 022C E1 A 1 pop hl 022D D1 A 2 pop de 022E C1 A 3 pop bc 022F C9 281 ret 282 283 ; 284 ; Output Status 285 ; MEX kennt nur den globalen Ansprung INCTL1 fuer den Status des Modem 286 ; Control Port. 287 ; Deshalb Output Status ueber MASKS holen 288 0230 289 OUTSP: 290 save 0230 C5 A 1 push bc 0231 D5 A 2 push de 0232 E5 A 3 push hl 0233 0E 08 291 ld c,auxoutstat 0235 CD 0D00 292 call mex 293 restore 0238 E1 A 1 pop hl 0239 D1 A 2 pop de 023A C1 A 3 pop bc 023B B7 294 or a 023C C9 295 ret 296 023D 297 ilprint: 023D 0E F0 298 ld c,ilp 023F C3 0D00 299 jp mex 300 301 ;Initialisierung 302 0242 303 nitmod: 0242 0E 0C 304 ld c,retvers ;evtl. CP/M Versionsnr. pruefen 0244 CD 0005 305 call bdos 0247 7C 306 ld a,h 0248 B7 307 or a 0249 C2 0310 308 jp nz,wrongv 024C 7D 309 ld a,l 024D FE 31 310 cp 31h 024F DA 0310 311 jp c,wrongv 312 0252 AF 313 xor a 0253 32 0719 314 ld (ings),a ;get code 0256 32 071D 315 ld (outgs),a 0259 0E 31 316 ld c,sysctrl 025B 11 0718 317 ld de,reauxin ;get redirection vector 025E CD 0005 318 call bdos ;fuer auxin und auxout 0261 22 071A 319 ld (inv),hl 0264 0E 31 320 ld c,sysctrl 0266 11 071C 321 ld de,reauxout 0269 CD 0005 322 call bdos 026C 22 071E 323 ld (outv),hl 324 ;get device table address 026F 0E 32 325 ld c,bioscall 0271 11 0722 326 ld de,gettbl 0274 CD 0005 327 call bdos 0277 22 0720 328 ld (biostblptr),hl ;Pointer MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 7 CMEX MAC 14 Mar 89 23:59 027A 01 0008 329 ld bc,8 027D 1E 00 330 ld e,0 ;Zaehler Anzahl 027F 09 331 nitm1: add hl,bc ;Pointer weiter 0280 1C 332 inc e ;Zaehler weiter 0281 7E 333 ld a,(hl) 0282 B7 334 or a ;Tabelle Ende? 0283 20 FA 335 jr nz,nitm1 0285 7B 336 ld a,e 0286 32 072A 337 ld (devanz),a ;Anzahl phys. Device 338 339 ;Pr}fung, ob bereits initialisiert 340 ;wenn ja, Ausgang um evtl. Verbindung 341 ;nicht zu unterbrechen 342 0289 11 0183 343 ld de,defdev 028C CD 0377 344 call calcport ; wird redirection vector SOLL 028F DA 02F2 345 jp c,errdev ;Device nicht gefunden 0292 ED 5B 071A 346 ld de,(inv) ;redirection vector IST 0296 7A 347 ld a,d ;IST high byte 0297 A4 348 and h 0298 AC 349 xor h ;Vergleich mit SOLL 0299 20 2E 350 jr nz,nitm2 ;ungleich 029B 7B 351 ld a,e ;IST low byte 029C A5 352 and l 029D AD 353 xor l ;Vergleich mit SOLL 029E 20 29 354 jr nz,nitm2 ;ungleich 355 356 ;das gleiche fuer auxout Vector 02A0 ED 5B 071E 357 ld de,(outv) 02A4 7A 358 ld a,d ;IST high byte 02A5 A4 359 and h 02A6 AC 360 xor h ;Vergleich mit SOLL 02A7 20 20 361 jr nz,nitm2 ;ungleich 02A9 7B 362 ld a,e ;IST low byte 02AA A5 363 and l 02AB AD 364 xor l ;Vergleich mit SOLL 02AC 20 1B 365 jr nz,nitm2 ;ungleich 366 02AE CD 0350 367 call calcbdptr ;Vergleich der Baudrate 02B1 7E 368 ld a,(hl) ;CP/M Baudrate 02B2 B7 369 or a 02B3 28 14 370 jr z,nitm2 ;Baudrate ungeeignet 02B5 21 070E 371 ld hl,baudtb ;Umrechnen auf MEX Baudrate 02B8 01 000A 372 ld bc,bdtblg 02BB ED B1 373 cpir 02BD 20 0A 374 jr nz,nitm2 ;nicht gefunden 02BF 3E 0A 375 ld a,bdtblg 02C1 0C 376 inc c 02C2 91 377 sub a,c ; MEX Baudrate 02C3 4F 378 ld c,a 02C4 3A 0107 379 ld a,(mspeed) ;Vergleich mit default 02C7 B9 380 cp c 02C8 C8 381 ret z ;Donerwetter, es ist alles richtig 382 383 ;Initialisieren Auxin Auxout Vector und Baudrate 384 02C9 11 0183 385 nitm2: ld de,defdev 02CC CD 0377 386 call calcport MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 8 CMEX MAC 14 Mar 89 23:59 02CF 38 21 387 jr c,errdev ;Device gibt es nicht 02D1 CD 0388 388 call setport 02D4 3A 0107 389 ld a,(mspeed) 02D7 CD 032F 390 call pbaud 02DA D0 391 ret nc ;FERTIG 392 ;Normal Ausgang Initialisiert 393 02DB 394 errbd: ;Baudrate unter CP/M nicht verfuegbar 02DB CD 023D 395 call ilprint 02DE 07 20 49 6E 396 defz 'G'-'@',' Invalid baudrate' 02F1 C9 397 ret 398 02F2 399 errdev: 02F2 CD 023D 400 call ilprint 02F5 07 20 49 6E 401 defz 'G'-'@',' Invalid physical device' 030F C9 402 ret 403 0310 404 wrongv: 0310 CD 023D 405 call ilprint 0313 07 0D 0A 20 406 defz 'G'-'@',cr,lf,' Sorry, you need CP/M 3' 032E C9 407 ret 408 409 ;Setzen der Baudrate MEX Baudrate Code 410 032F 411 pbaud: 412 save 032F C5 A 1 push bc 0330 D5 A 2 push de 0331 E5 A 3 push hl 0332 16 00 413 ld d,0 0334 5F 414 ld e,a ;MEX Baudrate Code 0335 21 070E 415 ld hl,baudtb 0338 19 416 add hl,de 0339 7E 417 ld a,(hl) ;CPM Baudrate Code 033A 57 418 ld d,a 033B B7 419 or a 033C 37 420 scf ;carry bei Fehler 033D 28 0D 421 jr z,pb1 033F CD 0350 422 call calcbdptr 0342 38 08 423 jr c,pb1 ;Phys Device nicht gefunden 0344 7A 424 ld a,d 0345 CD 0367 425 call setbaud 0348 7B 426 ld a,e 0349 32 0107 427 ld (mspeed),a 034C 428 pb1: restore 034C E1 A 1 pop hl 034D D1 A 2 pop de 034E C1 A 3 pop bc 034F C9 429 ret 430 431 ;Ausgang Pointer auf Baudrate in Device Table 432 0350 433 calcbdptr: 0350 D5 434 push de 0351 11 0183 435 ld de,defdev ;Pointer Device Name 0354 CD 03A6 436 call calcdev ;ermittle Device Nr. 0357 38 0C 437 jr c,cp1 ;nicht gefunden 0359 41 438 ld b,c ;Dev Nr MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 9 CMEX MAC 14 Mar 89 23:59 035A 04 439 inc b 035B 11 0008 440 ld de,8 ;8 byte pro Eintrag 035E 2A 0720 441 ld hl,(biostblptr) 0361 19 442 cp2: add hl,de 0362 10 FD 443 djnz cp2 0364 2B 444 dec hl ;Pointer auf Baudraten byte 0365 D1 445 cp1: pop de 0366 C9 446 ret 447 448 ;Eingang CP/M Baudrate Device Nr Pointer auf Eintrag 449 0367 450 setbaud: 0367 D5 451 push de 0368 77 452 ld (hl),a ;Baudrate eintragen 0369 79 453 ld a,c 036A 32 0708 454 ld (devc),a ;Dev Nr eintragen 036D 0E 32 455 ld c,bioscall 036F 11 0706 456 ld de,devinit 0372 CD 0005 457 call bdos 0375 D1 458 pop de 0376 C9 459 ret 460 461 ;Ausgang Redirection Vector 462 0377 463 calcport: 0377 CD 03A6 464 call calcdev ;Device Nr. ermitteln 037A D8 465 ret c ;unbekannt 037B 41 466 ld b,c ;Dev. Nr 037C 04 467 inc b 037D 21 0000 468 ld hl,0 0380 37 469 scf 0381 CB 1C 470 cap1: rr h ;Bit an zugehoerige Position 0383 CB 0D 471 rrc l ;schieben 0385 10 FA 472 djnz cap1 0387 C9 473 ret 474 475 ;log Device auxin und auxout dem phys. Device zuordnen 476 0388 477 setport: 0388 22 071A 478 ld (inv),hl 038B 22 071E 479 ld (outv),hl 038E 3E FE 480 ld a,0feh ;set word code 0390 32 0719 481 ld (ings),a 0393 32 071D 482 ld (outgs),a 0396 11 0718 483 ld de,reauxin 0399 0E 31 484 ld c,sysctrl ;SCB setzen 039B CD 0005 485 call bdos 039E 11 071C 486 ld de,reauxout 03A1 0E 31 487 ld c,sysctrl 03A3 C3 0005 488 jp bdos 489 490 ;Device Nr ermitteln 491 03A6 492 calcdev: 03A6 3A 072A 493 ld a,(devanz) ;Anzahl phys. Device's 03A9 47 494 ld b,a 03AA 0E 00 495 ld c,0 03AC 2A 0720 496 ld hl,(biostblptr) ;Device Table MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 10 CMEX MAC 14 Mar 89 23:59 03AF 497 cdev1: save 03AF C5 A 1 push bc 03B0 D5 A 2 push de 03B1 E5 A 3 push hl 03B2 01 0006 498 ld bc,6 ;Laenge Name 03B5 7E 499 cdev2: ld a,(hl) ;Teste ob space 03B6 FE 20 500 cp 20h 03B8 28 09 501 jr z,cdev3 ;dann fertig 03BA 1A 502 ld a,(de) ;Zeichen Vergleichsstring 03BB ED A1 503 cpi 03BD 20 04 504 jr nz,cdev3 ;ungleich, abbrechen 03BF 13 505 inc de ;Pointer +1 03C0 EA 03B5 506 jp pe,cdev2 03C3 507 cdev3: restore 03C3 E1 A 1 pop hl 03C4 D1 A 2 pop de 03C5 C1 A 3 pop bc 03C6 28 0A 508 jr z,cdev4 ;gefunden 03C8 C5 509 push bc 03C9 01 0008 510 ld bc,8 03CC 09 511 add hl,bc 03CD C1 512 pop bc 03CE 0C 513 inc c ;Device Nr + 1 03CF 10 DE 514 djnz cdev1 03D1 37 515 scf ;Kennung nicht gefunden 03D2 516 cdev4: 03D2 C9 517 ret 518 519 ;Waehlen 520 03D3 521 dial: 03D3 2A 0704 522 ld hl,(dialptr) 03D6 FE FE 523 cp 254 03D8 28 0A 524 jr z,stdial 03DA FE FF 525 cp 255 03DC 28 0D 526 jr z,enddial 03DE 77 527 ld (hl),a ;digit 03DF 23 528 inc hl 03E0 22 0704 529 ld (dialptr),hl 03E3 C9 530 ret 531 03E4 532 stdial: 03E4 21 06DC 533 ld hl,dialbuf ;pointer normieren 03E7 22 0704 534 ld (dialptr),hl 03EA C9 535 ret 536 03EB 537 enddial: 03EB 36 0D 538 ld (hl),cr 03ED 23 539 inc hl 03EE 36 00 540 ld (hl),0 03F0 21 06D7 541 ld hl,dialstr 03F3 CD 0465 542 call send 03F6 0E FF 543 wed1: ld c,inmdm 03F8 CD 0D00 544 call mex 03FB 30 F9 545 jr nc,wed1 ;Modem Echo abfangen 03FD 0E 3C 546 ld c,60 ;warte 60 sec auf Ergebnis 03FF 547 wed2: 03FF C5 548 push bc MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 11 CMEX MAC 14 Mar 89 23:59 0400 06 01 549 ld b,1 ;1 sec timed input 0402 0E FE 550 ld c,timer 0404 CD 0D00 551 call mex 0407 0E FF 552 ld c,inmdm 0409 CD 0D00 553 call mex 040C C1 554 pop bc 040D 38 08 555 jr c,wed10 040F FE 0D 556 cp cr ;LF und CR ueberspringen 0411 28 04 557 jr z,wed10 0413 FE 0A 558 cp lf 0415 20 28 559 jr nz,wed3 ;Modem hat Char 0417 C5 560 wed10: push bc 0418 0E 06 561 ld c,consio ;direct console I/O 041A 1E FF 562 ld e,0ffh 041C CD 0005 563 call bdos 041F C1 564 pop bc 0420 B7 565 or a 0421 28 16 566 jr z,wed4 ;kein char 0423 06 03 567 ld b,3 ;Return code :Keyboard abort 0425 FE 03 568 cp 'C'-'@' 0427 28 05 569 jr z,wed5 0429 05 570 dec b ;Return code :No answer 042A FE 18 571 cp 'X'-'@' 042C 20 0B 572 jr nz,wed4 042E C5 573 wed5: push bc 042F 06 0D 574 ld b,cr ;shut down modem 0431 0E F9 575 ld c,sndchr 0433 CD 0D00 576 call mex 0436 C1 577 pop bc 0437 78 578 ld a,b ;return code 0438 C9 579 ret ;AUSGANG bei Abbruch 580 0439 0D 581 wed4: dec c ;timer 043A 20 C3 582 jr nz,wed2 043C 3E 02 583 ld a,2 ;return code :No answer 043E C9 584 ret ;timeout 585 043F 586 wed3: ;Modeminput auswerten 043F E6 7F 587 and 7fh 0441 C5 588 push bc 0442 21 06B0 589 ld hl,modtab 0445 01 0020 590 ld bc,modtlg 0448 ED A1 591 wed6: cpi 044A 28 05 592 jr z,wed7 ;gefunden 044C ED A1 593 cpi ;skip naechsten char 044E EA 0448 594 jp pe,wed6 ;weiter 0451 C1 595 wed7: pop bc 0452 7E 596 ld a,(hl) ;MEX Errorcode 0453 FE FF 597 cp 0ffh ;unbekannt? 0455 28 A8 598 jr z,wed2 ;dann weiter warten 0457 F5 599 push af ;Modem Echo 0458 0E FF 600 wed8: ld c,inmdm ;bis zum naechsten 045A CD 0D00 601 call mex ;LF abfangen 045D 38 04 602 jr c,wed9 ;kein Zeichen mehr 045F FE 0A 603 cp lf 0461 20 F5 604 jr nz,wed8 0463 F1 605 wed9: pop af ;Normalausgang 0464 C9 606 ret MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 12 CMEX MAC 14 Mar 89 23:59 607 0465 608 send: 0465 0E FB 609 ld c,sndrdy 0467 CD 0D00 610 call mex 046A 20 F9 611 jr nz,send ;warte bis output ready to send 046C AF 612 xor a 046D 46 613 ld b,(hl) 046E 23 614 inc hl 046F B0 615 or b 0470 C8 616 ret z ;Endemarkierung 0471 0E F9 617 ld c,sndchr 0473 CD 0D00 618 call mex 0476 18 ED 619 jr send 0478 C9 620 ret 621 ;Set Command 622 0479 623 setcmd: 0479 0E F4 624 ld c,sblank 047B CD 0D00 625 call mex 047E DA 04F7 626 jp c,aktport ;kein Argument 0481 11 068E 627 ld de,cmdtbl 0484 0E F7 628 ld c,lookup 0486 CD 0D00 629 call mex 0489 E5 630 push hl 048A D0 631 ret nc 048B E1 632 pop hl ;hier nicht gefunden 048C 633 setcerr: 048C CD 023D 634 call ilprint 048F 0D 0A 53 45 635 defz cr,lf,'SET command error',cr,lf 04A5 C9 636 ret 637 04A6 0E F4 638 setp: ld c,sblank 04A8 CD 0D00 639 call mex ;skip spaces 04AB 38 DF 640 jr c,setcerr 04AD 06 06 641 ld b,6 ;max 6 char holen 04AF 21 06D0 642 ld hl,portinp 04B2 C5 643 setp1: push bc 04B3 E5 644 push hl 04B4 0E F1 645 ld c,gnc 04B6 CD 0D00 646 call mex ;hole 1 Zeichen 04B9 E1 647 pop hl 04BA C1 648 pop bc 04BB 38 0E 649 jr c,setp2 ;kein Zeichen mehr da 04BD FE 20 650 cp 20h ;nicht die Baudrate 04BF 28 0A 651 jr z,setp2 ;fressen 04C1 FE 41 652 cp 'A' 04C3 38 02 653 jr c,setp3 04C5 E6 DF 654 and 0dfh ;Grossbuchstaben machen 04C7 77 655 setp3: ld (hl),a 04C8 23 656 inc hl 04C9 10 E7 657 djnz setp1 04CB 36 24 658 setp2: ld (hl),'$' 04CD 11 06D0 659 ld de,portinp 04D0 CD 03A6 660 call calcdev 04D3 DA 02F2 661 jp c,errdev 662 ;gueltiges Device 04D6 21 06D0 663 ld hl,portinp 04D9 11 0183 664 ld de,defdev MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 13 CMEX MAC 14 Mar 89 23:59 04DC 01 0006 665 ld bc,6 04DF ED B0 666 ldir ;wird default device 04E1 11 0183 667 ld de,defdev 04E4 CD 0377 668 call calcport 04E7 CD 0388 669 call setport 04EA 0E F4 670 ld c,sblank 04EC CD 0D00 671 call mex ;weitere Zeichen? 04EF 30 29 672 jr nc,setb ;Baudrate folgt? 04F1 3A 0107 673 ld a,(mspeed) 04F4 CD 032F 674 call pbaud ;nein, aber neues Devices initialisieren 04F7 675 aktport: 04F7 CD 023D 676 call ilprint 04FA 0D 0A 20 20 677 defz cr,lf,' AUX connected to ' 0510 11 0183 678 ld de,defdev 0513 0E 09 679 ld c,print 0515 CD 0D00 680 call mex 0518 18 10 681 jr aktbaud 682 051A 0E F5 683 setb: ld c,bdpars 051C CD 0D00 684 call mex ;Parse Baudrate 051F DA 02DB 685 jp c,errbd ;Fehler 0522 CD 032F 686 call pbaud ;versuche einzustellen 0525 DA 02DB 687 jp c,errbd 0528 18 CD 688 jr aktport 689 052A 690 aktbaud: 052A CD 023D 691 call ilprint 052D 20 42 61 75 692 defz ' Baudrate : ' 053A 3A 0107 693 ld a,(mspeed) 053D 0E EE 694 ld c,prbaud 053F CD 0D00 695 call mex 0542 CD 023D 696 call ilprint 0545 0D 0A 20 00 697 defz cr,lf,' ' 0549 C9 698 ret 699 054A 700 sethelp: 054A CD 023D 701 call ilprint 054D 0D 0A 73 65 702 db cr,lf,'set port ' 0560 0D 0A 73 65 703 db cr,lf,'set port ' 057E 0D 0A 73 65 704 db cr,lf,'set baud ' 0593 0D 0A 705 db cr,lf 0595 0D 0A 20 20 706 db cr,lf,' baud rates available' 05B2 0D 0A 20 20 707 DB cr,lf,' --------------------' 05CF 0D 0A 31 31 708 db cr,lf,'110 300 600 1200 2400 4800 9600 19200' 05F6 0D 0A 709 db cr,lf 05F8 0D 0A 20 20 710 db cr,lf,' physical serial devices available' 061D 0D 0A 20 20 711 db cr,lf,' ---------------------------------' 0642 0D 0A 00 712 defz cr,lf 713 0645 2A 0720 714 ld hl,(biostblptr) 0648 3A 072A 715 ld a,(devanz) 064B 47 716 ld b,a 064C 3A 010A 717 ld a,(colums) 064F 4F 718 ld c,a 719 0650 720 sethloop: 0650 E5 721 push hl 0651 C5 722 push bc MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 14 CMEX MAC 14 Mar 89 23:59 0652 E5 723 push hl 0653 01 0006 724 ld bc,6 0656 09 725 add hl,bc 0657 7E 726 ld a,(hl) 0658 E1 727 pop hl 0659 E6 0F 728 and 0fh 065B FE 0F 729 cp 0fh ;var baud,ser,i,o 065D 20 1F 730 jr nz,seth1 065F 11 0739 731 ld de,devprt 0662 ED B0 732 ldir ;name umschaufeln 0664 11 0739 733 ld de,devprt 0667 0E 09 734 ld c,print 0669 CD 0D00 735 call mex 066C E3 736 ex (sp),hl ;!BC Register 066D 2D 737 dec l 066E E3 738 ex (sp),hl 066F 20 0D 739 jr nz,seth1 0671 CD 023D 740 call ilprint 0674 0D 0A 20 00 741 defz cr,lf,32 0678 3A 010A 742 ld a,(colums) 067B E3 743 ex (sp),hl 067C 6F 744 ld l,a 067D E3 745 ex (sp),hl 067E 746 seth1: 067E C1 747 pop bc 067F E1 748 pop hl 0680 11 0008 749 ld de,8 0683 19 750 add hl,de 0684 10 CA 751 djnz sethloop 0686 CD 023D 752 call ilprint 0689 0D 0A 20 00 753 defz cr,lf,32 068D C9 754 ret 755 756 ;-------------------------------- 757 ; D A T A A R E A 758 ;-------------------------------- 759 760 068E BF 761 cmdtbl: defc '?' 068F 054A 762 dw sethelp 0691 42 41 55 C4 763 defc 'BAUD' 0695 051A 764 dw setb 0697 42 41 D5 765 defc 'BAU' 069A 051A 766 dw setb 069C 42 C1 767 defc 'BA' 069E 051A 768 dw setb 06A0 50 4F 52 D4 769 defc 'PORT' 06A4 04A6 770 dw setp 06A6 50 4F D2 771 defc 'POR' 06A9 04A6 772 dw setp 06AB 50 CF 773 defc 'PO' 06AD 04A6 774 dw setp 06AF 00 775 db 0 776 777 ;Uebersetzung Modemmeldung in MEX Code 778 ;byte 1 Modem byte 2 MEX 779 06B0 780 modtab: MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 15 CMEX MAC 14 Mar 89 23:59 06B0 00 FF 781 db 0,0ffh ;ignorieren 06B2 01 00 782 db 1,0 ;connected 06B4 02 FF 783 db 2,0ffh ;ignorieren 06B6 03 02 784 db 3,2 ;no connect 06B8 04 04 785 db 4,4 ;Modem Error 06BA 05 00 786 db 5,0 ;connected 06BC 06 FF 787 db 6,0ffh ;ignorieren 06BE 07 01 788 db 7,1 ;far end busy 06C0 08 FF 789 db 8,0ffh ;ignorieren 790 791 ; evtl auch alphanumerisch 06C2 4F FF 792 db 'O',0ffh 06C4 43 00 793 db 'C',0 06C6 52 FF 794 db 'R',0ffh 06C8 4E 02 795 db 'N',2 06CA 45 04 796 db 'E',4 06CC 42 01 797 db 'B',1 06CE FF FF 798 db 0ffh,0ffh 799 0020 800 modtlg: equ $-modtab 801 802 06D0 803 portinp: 06D0 0007 804 ds 7 805 06D7 806 dialstr: 06D7 41 54 44 50 807 db 'ATD',dpuls,',' ;vorher 2 Sek. Pause 06DC 808 dialbuf: 06DC 0028 809 ds 40 0704 810 dialptr: 0704 0002 811 ds 2 812 0706 813 devinit: 0706 15 814 db 21 0707 00 815 db 0 0708 0000 0000 816 devc: dw 0,0,0 817 070E 03 06 00 07 818 baudtb: db 3,6,0,7,0,8,10,12,14,15 ;110,300,-,610,-,1200,2400,4800,9600,19200 000A 819 bdtblg: equ $ - baudtb 820 0718 821 reauxin: 0718 26 822 db 26h 0719 00 823 ings: db 0 ;get=0/set word=fe 071A 0000 824 inv: dw 0 ;value fuer set 825 071C 826 reauxout: 071C 28 827 db 28h 071D 00 828 outgs: db 0 071E 0000 829 outv: dw 0 830 831 0720 832 biostblptr: 0720 0000 833 dw 0 0722 14 834 gettbl: db 20 0723 0007 835 ds 7 072A 00 836 devanz: db 0 837 072B 838 mbreak1: MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 16 CMEX MAC 14 Mar 89 23:59 072B 2B 2B 2B 00 839 defz '+++' 840 072F 841 mbreak2: 072F 41 54 48 0D 842 defz 'ATH',cr 843 0734 1B 54 844 eosmsg: db esc,'T' ;clear to screen end 0736 24 845 db '$' 846 0737 0C 847 clsmsg: db 'L'-'@' ;clear screen 0738 24 848 db '$' 849 0739 20 20 20 20 850 devprt: db ' $' 851 852 END 0 Error(s) Detected. 1606 Absolute Bytes. 178 Symbols Detected. MEX Overlay fuer CPM 3 15 Mar 89 00:00 Z80ASM 1.24 Page 17 Symbol Table: 0113 ADDLF 052A AKTBAUD 04F7 AKTPORT 0003 AUXIN 0007 AUXINSTAT 0004 AUXOUT 0008 AUXOUTSTAT 010E BAKFLG 070E BAUDTB 0005 BDOS 00F5 BDPARS 000A BDTBLG 0007 BELL 0032 BIOSCALL 0720 BIOSTBLPTR 0180 BREAKV 0120 BRKCHR 0108 BYTDLY 0350 CALCBDPTR 03A6 CALCDEV 0377 CALCPORT 0381 CAP1 03AF CDEV1 03B5 CDEV2 03C3 CDEV3 03D2 CDEV4 00FC CHEKCC 0106 CLOCK 0195 CLREOS 019E CLS 0737 CLSMSG 068E CMDTBL 010A COLUMS 0006 CONSIO 0365 CP1 0361 CP2 000D CR 010F CRCDFL 0109 CRDLY 0111 CVTBS 00EF DECOUT 0183 DEFDEV 072A DEVANZ 0708 DEVC 0706 DEVINIT 0739 DEVPRT 03D3 DIAL 06DC DIALBUF 0704 DIALPTR 06D7 DIALSTR 0162 DIALV 01E9 DISCON 0165 DISCV 0050 DPULS 03EB ENDDIAL 0734 EOSMSG 02DB ERRBD 02F2 ERRDEV 001B ESC 00F3 EVALA 011F EXITCHR 0127 EXTCHR 011E EXTRA1 0722 GETTBL 00F1 GNC 0168 GOODBV 01E7 GOODBY FFFF GRIP 011D IGNCTL 00F0 ILP 023D ILPRINT 012A INCTL1 020B INDP 0719 INGS 00FF INMDM 016B INMODV 013E INPORT 0217 INSP 071A INV 000A LF 00F2 LKAHED 0122 LOGCHR 00F7 LOOKUP 0123 LSTCHR 0119 LSTTST 0148 MASKR 014E MASKS 072B MBREAK1 072F MBREAK2 0D00 MEX 06B0 MODTAB 0020 MODTLG 0107 MSPEED 016E NEWBDV 027F NITM1 02C9 NITM2 0242 NITMOD 0000 NO 0121 NOCONN 0171 NOPARV 0134 OTDATA 0223 OUTDP 071D OUTGS 0230 OUTSP 071E OUTV 0174 PARITV 00F6 PARSFN 034C PB1 032F PBAUD 0103 PMODEM 06D0 PORTINP 00EE PRBAUD 0009 PRINT 00F8 RCVCHR 00FA RCVRDY 0718 REAUXIN 071C REAUXOUT 0000 RESTORE 000C RETVERS 000A REV 0116 SAVCCP 0126 SAVCHR 0000 SAVE 00F4 SBLANK 01E8 SBREAK 010C SCRTST 0465 SEND 051A SETB 0367 SETBAUD 048C SETCERR 0479 SETCMD 010B SETFLG 067E SETH1 054A SETHELP 0650 SETHLOOP 04A6 SETP 04B2 SETP1 04CB SETP2 04C7 SETP3 0388 SETPORT 0177 SETUPV 0104 SMODEM 00F9 SNDCHR 00FB SNDRDY 003C SPEED 03E4 STDIAL 0031 SYSCTRL 01A7 SYSVER 0009 TAB 0000 TEST 014B TESTR 0151 TESTS 00FE TIMER 00FD TMDINP 0110 TOGCRC 0112 TOGLBK 0114 TOGLF 011C TOGXOF 0100 TPA 0105 TPULSE 0125 TRNCHR 0115 TRNLOG 0124 UNSAVE 017D VERSNV 03F6 WED1 0417 WED10 03FF WED2 043F WED3 0439 WED4 042E WED5 0448 WED6 0451 WED7 0458 WED8 0463 WED9 0310 WRONGV 011A XOFTST 011B XONWT FFFF YES 367 SETBAUD 048C SETCERR 0479 SETCMD