MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00001 00001 ;LOWCORE/ASM - Low Memory Assignments 0000 00003 @MOD2 EQU 00 ;Set MOD2 false FFFF 00004 @MOD4 EQU -1 ;Set MOD4 true 0000 00005 *GET BUILDVER/ASM:3 00006 ; 00007 ; Buildver/asm is a bit of a kludge since not all utilities can load 00008 ; equates from LDOS60 and still compile. LOWCORE and everybody else 00009 ; relies on this setting, and it eventually ends up in LDOS60/EQU 00010 ; for programs that can use that. 00011 ; FFFF 00012 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B) 00013 ; These switches activate patches made since the 1B release. 00014 ; It is important that all earlier patches be enabled when a higher 00015 ; patch is enabled. 00016 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the 00017 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.) FFFF 00018 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI) FFFF 00019 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR) FFFF 00020 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT) FFFF 00021 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL) 00022 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19. FFFF 00023 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *) FFFF 00024 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY) 00025 ; 00026 ;End of BUILDVER/ASM 00027 ; 00028 ; LDOS 6.x Low Core RAM storage assignments 00029 ; Copyright (C) 1982 by Logical Systems, Inc. 00030 ; 00031 ; Define switches for international or domestic 00032 ; 0000 00033 @GERMAN EQU 0 0000 00034 @FRENCH EQU 0 00035 IF @GERMAN.AND.@FRENCH 00036 ERR 'Can''t do both French and German' 00037 ENDIF 00038 IF @GERMAN.OR.@FRENCH 00039 @INTL EQU -1 00040 @USA EQU 00 00041 @HZ50 EQU -1 00042 ELSE 0000 00043 @INTL EQU 00 FFFF 00044 @USA EQU -1 0000 00045 @HZ50 EQU 00 00046 ENDIF 00047 ; 0000 00048 START$ EQU 0 00049 ; 00050 ; These EQUs are detailed in SYSRES 00051 ; 000E 00052 FDDINT$ EQU 0EH 001B 00053 PDRV$ EQU 1BH 002B 00054 TIMSL$ EQU 2BH 002C 00055 TIMER$ EQU 2CH MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00002 002D 00056 TIME$ EQU TIMER$+1 0033 00057 DATE$ EQU 33H 003E 00058 INTVC$ EQU 3EH 006A 00059 FLGTAB$ EQU 6AH 006C 00060 CFLAG$ EQU FLGTAB$+'C'-'A' 006D 00061 DFLAG$ EQU FLGTAB$+'D'-'A' 0072 00062 IFLAG$ EQU FLGTAB$+'I'-'A' 0074 00063 KFLAG$ EQU FLGTAB$+'K'-'A' 0076 00064 MODOUT$ EQU FLGTAB$+'M'-'A' 0077 00065 NFLAG$ EQU FLGTAB$+'N'-'A' 0078 00066 OPREG$ EQU FLGTAB$+'O'-'A' 007B 00067 RFLAG$ EQU FLGTAB$+'R'-'A' 007C 00068 SFLAG$ EQU FLGTAB$+'S'-'A' 007F 00069 VFLAG$ EQU FLGTAB$+'V'-'A' 0089 00070 @KITSK EQU FLGTAB$+31 00071 ; 0200 00072 ORG 200H+START$ 00073 ; 00074 ; Page 2 - Device Control Blocks 00075 ; 0200 00 00076 BUR$ DB 00H ;Bank use RAM 0201 FE 00077 BAR$ DB 0FEH ;Bank available RAM 0202 14 00078 LBANK$ DB 20 ;Dir cyl & logical bank 0203 01 00079 JCLCB$ DB 1,0,0 ;Mini-DCB for JCL gets 00 00 0206 F40F 00080 DVRHI$ DW DVREND$ ;Start of low I/O zone 0208 05 00081 KIDCB$ DB 5 ;Permit CTL, GET 0209 F008 00082 DW KIDVR 020B 00 00083 DB 0,0,0,'KI' 00 00 4B 49 0210 07 00084 DODCB$ DB 7 ;Permit CTL, PUT, GET 0211 880B 00085 DW DODVR 0213 00 00086 DB 0,0,0,'DO' 00 00 44 4F 0218 06 00087 PRDCB$ DB 6 ;Permit CTL, PUT 0219 010E 00088 DW PRDVR 021B 00 00089 DB 0,0,0,'PR' 00 00 50 52 0220 15 00090 SIDCB$ DB 15H ;Routed to *KI 0221 0802 00091 DW KIDCB$ 0223 0D 00092 DB 0DH,0,0,'SI' 00 00 53 49 0228 17 00093 SODCB$ DB 17H ;Routed to *DO 0229 1002 00094 DW DODCB$ 022B 0F 00095 DB 0FH,0,0,'SO' 00 00 53 4F 0230 0A 00096 JLDCB$ DB 0AH,0,0,0AH,0,0,'JL' 00 00 0A 00 00 4A 4C 0238 00097 S1DCB$ EQU $ ;1st spare DCB 0031 00098 DCBKL$ EQU JLDCB$&0FFH+1 ;Non-killable DCB's 00099 ; 00100 ; Now load the BOOT loader - part in this page 00101 ; 0238 00102 *GET BOOT4:3 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00003 00103 ;BOOT4/ASM - LS-DOS 6.3 00104 ; SUBTTL '' MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00004 00106 *MOD 00107 ; 0040 00108 KEYIN EQU 40H 0066 00109 NMIVECT EQU 66H 021B 00110 DSPLY EQU 21BH 1200 00111 BUFFER EQU 1200H 43F6 00112 BOOTBUF EQU 43FFH-9 00113 ; 00114 ; Boot loader routine read in by ROM, along with 00115 ; the lowcore I/O drivers. 00116 ; This section loads in SYSRES 00117 ; 0238 FD217004 00118 LBOOT LD IY,DCT$ ;Set IY for FDCDVR use 023C FD7E09 00119 LD A,(IY+9) ;Directory track is 023F FD7705 00120 LD (IY+5),A ; the current track 0242 3E04 00121 LD A,4 0244 327B00 00122 LD (FLGTAB$+'R'-'A'),A ;Set retries 0247 3EC9 00123 LD A,0C9H 0249 320E00 00124 LD (FDDINT$),A ;Return for disk driver 024C 3E12 00125 LD A,18 ;5" sectors/track, dden 024E FDCB046E 00126 BIT 5,(IY+4) ;Dbl sided? 0252 2801 00127 JR Z,NOTDBL 0254 87 00128 ADD A,A ;Adjust to 36 sect/cyl 0255 32A502 00129 NOTDBL LD (SECTRK),A 00130 ; 00131 ; Set up for a fragmented file 00132 ; 0258 D9 00133 EXX 0259 0E06 00134 LD C,6 ;Sectors/gran 025B CDB102 00135 CALL GETEXT ;Pick up extent 1 025E D9 00136 EXX 00137 ; 025F CD6802 00138 CALL LOAD ;Read in sysres 0262 3EFB 00139 LD A,0FBH ;EI instruction 0264 32950F 00140 LD (DISKEI),A ; stuffed into FDCDVR 0267 E9 00141 JP (HL) ;Continue system init 00142 ; 0268 CD9702 00143 LOAD CALL RDBYTE ;Get type code 026B 3D 00144 DEC A 026C 200C 00145 JR NZ,LOAD2 ;Bypass if not type 1 026E CD8802 00146 CALL GETADR ;Get blk len & load adr 0271 CD9702 00147 LOAD1 CALL RDBYTE ;Start reading the block 0274 77 00148 LD (HL),A ;Stuff into memory 0275 23 00149 INC HL ;Bump memory pointer 0276 10F9 00150 DJNZ LOAD1 ;Loop for entire block 0278 18EE 00151 JR LOAD ;Restart the process 00152 ; 027A 3D 00153 LOAD2 DEC A ;Test if type 2 (traadr) 027B 280B 00154 JR Z,GETADR ;Ah, go if transfer addr 027D CD9702 00155 CALL RDBYTE ;Assume comment, 0280 47 00156 LD B,A ; get comment length 0281 CD9702 00157 LOAD3 CALL RDBYTE ; & ignore it 0284 10FB 00158 DJNZ LOAD3 0286 18E0 00159 JR LOAD ;Continue to read MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00005 00160 ; 00161 ; got the transfer address type code 00162 ; 0288 CD9702 00163 GETADR CALL RDBYTE ;Get block length 028B 47 00164 LD B,A 028C CD9702 00165 CALL RDBYTE ;Get lo-order load addr 028F 6F 00166 LD L,A 0290 05 00167 DEC B ;Adj length for this byte 0291 CD9702 00168 CALL RDBYTE ;Get hi-order load addr 0294 67 00169 LD H,A 0295 05 00170 DEC B ;Adj length for this byte 0296 C9 00171 RET 00172 ; 00173 ; routine to read a byte 00174 ; 0297 D9 00175 RDBYTE EXX ;Switch memory/buf ptrs 0298 2C 00176 INC L ;Bump buf pointer 0299 2013 00177 JR NZ,RDB2 ;Bypass disk i/o if more 029B C5 00178 PUSH BC 029C 0609 00179 LD B,9 ;Read sector function # 029E CD7004 00180 CALL DCT$ ;Get another sector 02A1 C1 00181 POP BC 02A2 1C 00182 INC E ;Bump sector counter 02A3 7B 00183 LD A,E 02A4 D600 00184 SUB $-$ ;Is this the last sector 02A5 00185 SECTRK EQU $-1 02A6 2002 00186 JR NZ,RDB1 ; on the cylinder? 02A8 5F 00187 LD E,A ;Yes, restart at 0 02A9 14 00188 INC D ; & bump the cylinder up 02AA 05 00189 RDB1 DEC B ;Dec sectors this extent 02AB CCB102 00190 CALL Z,GETEXT ;Get next extent if 0 02AE 7E 00191 RDB2 LD A,(HL) ;P/u a byte 02AF D9 00192 EXX ;Exc mem/buf pointers 02B0 C9 00193 RET 00194 ; 00195 ; Load DE track,sector, B sectors this extent 00196 ; 00197 GETEXT 02B1 DD23 00198 INC IX ;Index directory entry 02B3 DD23 00199 INC IX ;Pt at grans this ext. 02B5 DD7E00 00200 LD A,(IX) 02B8 F5 00201 PUSH AF ;Save for later 02B9 07 00202 RLCA 02BA 07 00203 RLCA ;Normalize start gran 02BB 07 00204 RLCA 02BC E607 00205 AND 7 02BE CDCE02 00206 CALL MULTCA ;Start gran * grans/sec 02C1 5F 00207 LD E,A ;This is start sector 02C2 F1 00208 POP AF 02C3 E61F 00209 AND 00011111B ;Get total grans 02C5 3C 00210 INC A ; this extent 02C6 CDCE02 00211 CALL MULTCA ; * sect/gran 02C9 47 00212 LD B,A ;Sectors this extent 02CA DD56FF 00213 LD D,(IX-1) ;Cyl this extent MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00006 02CD C9 00214 RET 00215 ; 00216 ; Short multiply C * A 00217 ; 02CE C5 00218 MULTCA PUSH BC ;Save sect/gran in C 02CF 57 00219 LD D,A 02D0 AF 00220 XOR A 02D1 0608 00221 LD B,8 02D3 87 00222 MLTCA ADD A,A 02D4 CB21 00223 SLA C 02D6 3001 00224 JR NC,MLTCA1 02D8 82 00225 ADD A,D 02D9 10F8 00226 MLTCA1 DJNZ MLTCA 02DB C1 00227 POP BC 02DC C9 00228 RET 00229 ; 00230 ; Initialize the CRTC 00231 ; 00232 INITCRTC 02DD 01880F 00233 LD BC,15<8!88H ;Count, CRTC address reg 02E0 21FD02 00234 LD HL,CRTCTAB 02E3 7E 00235 $A1 LD A,(HL) 02E4 ED41 00236 OUT (C),B ;Pass reg # to CRTC 02E6 D389 00237 OUT (89H),A ;Pass value to CRTC reg 02E8 2B 00238 DEC HL ;Backup to next value 02E9 05 00239 DEC B ;To next lower reg 02EA F2E302 00240 JP P,$A1 02ED C9 00241 RET 02EE 63 00242 DB 99 ;Horiz total MD 02EF 50 00243 DB 80 ;Horiz displayed MD 02F0 55 00244 DB 85 ;Horiz sync position MD 02F1 0A 00245 DB 10 ;Horiz sync width 02F2 19 00246 DB 25 ;Vertical total 02F3 04 00247 DB 4 ;Vertical total adjust 02F4 18 00248 DB 24 ;Vertical displayed 02F5 18 00249 DB 24 ;Vertical sync position 02F6 00 00250 DB 0 ;Interlace mode 02F7 09 00251 DB 9 ;Maximum scan line addr 02F8 65 00252 DB 65H ;Cursor start 02F9 09 00253 DB 9 ;Cursor end 02FA 00 00254 DB 0 ;Start address (H) 02FB 00 00255 DB 0 ;Start address (L) 02FC 00 00256 DB 0 ;Cursor (H) 02FD 00 00257 CRTCTAB DB 0 ;Cursor (L) 02FE 00 00258 DC -$&0FFH,0 00 00259 ; 00260 ; System BOOT entry point, loaded by ROM 00261 ; 0300 00262 CORE$ DEFL $ 4300 00263 ORG 4300H 4300 00 00264 BOOT NOP 4301 FE14 00265 CP 14H ;Directory track location 4302 00266 DIRTRK EQU $-1 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00007 4303 F3 00267 DI 4304 3E86 00268 LD A,86H ;Bring up the RAM 4306 D384 00269 OUT (@OPREG),A 4308 327800 00270 LD (OPREG$),A 430B 2100F8 00271 LD HL,CRTBGN$ ;Clear video RAM 430E 1101F8 00272 LD DE,CRTBGN$+1 4311 017F07 00273 LD BC,CRTSIZE-1 4314 3620 00274 LD (HL),' ' 4316 EDB0 00275 LDIR 4318 21CD43 00276 LD HL,NMIRET ;Set NMI vector 431B 226700 00277 LD (NMIVECT+1),HL 431E 3EC3 00278 LD A,0C3H 4320 326600 00279 LD (NMIVECT),A 4323 3EC9 00280 LD A,0C9H ;Stuff return for ints 4325 323800 00281 LD (38H),A 00282 ; 00283 ; Read the first 16 sectors of track 0 00284 ; 4328 210002 00285 LD HL,START$+200H ;Pt to page 2 432B 55 00286 LD D,L ;Init to track 0, sec 0 432C 5D 00287 LD E,L 432D CD7743 00288 RDBOOT CALL RDSEQ ;Read a sector 4330 24 00289 INC H ;Bump to next page 4331 1C 00290 INC E ;Bump to next 4332 3E10 00291 LD A,16 4334 BB 00292 CP E ;Loop if more 4335 20F6 00293 JR NZ,RDBOOT 4337 CDDD02 00294 CALL INITCRTC ;Initialize the CRTC 00295 ; 00296 ; Now set up to load SYSRES 00297 ; 433A 3A0243 00298 LD A,(DIRTRK) ;P/u dir cyl 433D 327904 00299 LD (DCT$+9),A ;Update DCT to show DIR 4340 57 00300 LD D,A ;Set starting track and 4341 1E00 00301 LD E,0 ; init to read the GAT 4343 CD7443 00302 CALL RDSECT ; into BUFFER 4346 3ACD12 00303 LD A,(BUFFER+0CDH) ;Update DCT$ to show 4349 E620 00304 AND 20H ; the # of sides 434B 217404 00305 LD HL,DCT$+4 434E B6 00306 OR (HL) 434F 77 00307 LD (HL),A 4350 1E04 00308 LD E,4 ;Pt to SYS0 dir sector 4352 CD7443 00309 CALL RDSECT ;Read the SYS0 dir sec 4355 3A0012 00310 LD A,(BUFFER) ;Test if system disk 4358 E610 00311 AND 10H 435A 282D 00312 JR Z,NOTSYS ;Go if not 435C 211D12 00313 LD HL,BUFFER+21+8 ;SYS0 extent info 435F 11F643 00314 LD DE,BOOTBUF ;Use 43FF-8 4362 010800 00315 LD BC,8 4365 EDB8 00316 LDDR ;Store 1st four extents 4367 D5 00317 PUSH DE ;Pt IX to 1 byte 4368 DDE1 00318 POP IX ; before extent info 436A D9 00319 EXX 436B 21FF12 00320 LD HL,BUFFER+255 ;Init to buffer end MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00008 436E D9 00321 EXX 436F C33802 00322 JP LBOOT ;Load SYSRES 4372 00 00323 DB 0,0 ;Padding for posn 00 00324 ; 00325 ; routine to read a sector 00326 ; 4374 210012 00327 RDSECT LD HL,BUFFER ;Set buffer 4377 0605 00328 RDSEQ LD B,5 ;Init retry counter 4379 C5 00329 RDS1 PUSH BC ;Save counter 437A E5 00330 PUSH HL ;Save for retries 437B CD9643 00331 CALL READ ;Attempt read 437E E1 00332 POP HL 437F C1 00333 POP BC 4380 E61C 00334 AND 1CH ;Mask status 4382 C8 00335 RET Z ;Return if no error 4383 10F4 00336 DJNZ RDS1 ;Loop for retry 4385 21E043 00337 GOTERR LD HL,DISKERR ;"Disk error" 4388 DD 00338 DB 0DDH ;Hide next instruction 4389 21EA43 00339 NOTSYS LD HL,NOSYS ;"No system" 438C 010A00 00340 LD BC,ERRLEN 438F 1193FB 00341 LD DE,80*11+CRTBGN$+35 ;Middle of screen 4392 EDB0 00342 LDIR 4394 18FE 00343 HALTS JR HALTS ;Wait for RESET 00344 ; 4396 01F481 00345 READ LD BC,81F4H ;Set DDEN, DS1, d.s. port 4399 ED41 00346 OUT (C),B ;Select it 439B 0D 00347 DEC C ;Point C to data reg 439C 3E18 00348 LD A,18H ;Seek command (6 ms) 439D 00349 BOOTST$ EQU $-1 ;Set for boot step rate 00350 IFNE BOOTST$,439DH 00351 ERR 'Boot step out of position' 00352 ENDIF 439E ED51 00353 OUT (C),D ;Set desired track 43A0 CDD943 00354 CALL FDCMD ;Pass command & delay 43A3 DBF0 00355 SEEK1 IN A,(0F0H) ;Get status 43A5 CB47 00356 BIT 0,A ;Busy? 43A7 20FA 00357 JR NZ,SEEK1 43A9 7B 00358 LD A,E ;Set sector register 43AA D3F2 00359 OUT (0F2H),A 43AC 3E81 00360 LD A,81H ;Set DDEN & DS1 43AE D3F4 00361 OUT (0F4H),A 43B0 D5 00362 PUSH DE 43B1 1102C1 00363 LD DE,81H!40H<8!2 ;D=DS1 + DDEN + WSGEN 00364 ;E=Mask to see DRQ 43B4 3E80 00365 LD A,80H ;FDC READ command 43B6 CDD943 00366 CALL FDCMD ;Pass to ctrlr & set B=0 43B9 3EC0 00367 LD A,0C0H ;Enable INTRQ & timeout 43BB D3E4 00368 OUT (0E4H),A 43BD DBF0 00369 READLP1 IN A,(0F0H) ;Grab status 43BF A3 00370 AND E ;Test bit 1 43C0 28FB 00371 JR Z,READLP1 43C2 EDA2 00372 INI 43C4 7A 00373 LD A,D ;Set DDEN & DS1 & WSGEN MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00009 43C5 D3F4 00374 READLP2 OUT (0F4H),A ;Continue to select 43C7 EDA2 00375 INI ; while inputting 43C9 20FA 00376 JR NZ,READLP2 43CB 18FE 00377 JR $ ;Wait for NMI 43CD D1 00378 NMIRET POP DE ;Pop interrupt ret 43CE D1 00379 POP DE ;Restore DE 43CF AF 00380 XOR A ;Disable INTRQ & timeout 43D0 D3E4 00381 OUT (0E4H),A 43D2 3E81 00382 LD A,81H ;Reselect drive 43D4 D3F4 00383 OUT (0F4H),A 43D6 DBF0 00384 IN A,(0F0H) ;Get status 43D8 C9 00385 RET 43D9 D3F0 00386 FDCMD OUT (0F0H),A ;Give cmd to ctrlr 43DB 0618 00387 LD B,24 ;Time delay 43DD 10FE 00388 DJNZ $ 43DF C9 00389 RET 43E0 44 00390 DISKERR DB 'Disk error' 69 73 6B 20 65 72 72 6F 72 43EA 4E 00391 NOSYS DB 'No system ' 6F 20 73 79 73 74 65 6D 20 000A 00392 ERRLEN EQU $-NOSYS ;Length of error msg 43F4 00 00393 DC -$&0FFH,0 00 00 00 00 00 00 00 00 00 00 00 0400 00394 ORG CORE$+256 00396 ; MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00010 ' 53 2D 44 4F 53 36 33 4C 65 76 65 6C 2D 041E 31 00413 DB '1' ;<631> 00414 IF @BLD631H 041F 48 00415 DB 'H' ;<631H>Level-1H 00416 ELSE 00417 IF @BLD631G 00418 DB 'G' ;<631G>Level-1G 00419 ELSE 00420 IF @BLD631F 00421 DB 'F' ;<631F>Level-1F 00422 ELSE 00423 IF @BLD631E 00424 DB 'E' ;<631E>Level-1E 00425 ELSE 00426 IF @BLD631D 00427 DB 'D' ;<631D>Level-1D 00428 ELSE 00429 IF @BLD631C 00430 DB 'C' ;<631C>Level-1C 00431 ELSE 00432 DB 'B' ;<631>Level-1B (tree base) 00433 ENDIF ;C 00434 ENDIF ;D 00435 ENDIF ;E 00436 ENDIF ;F 00437 ENDIF ;G 00438 ENDIF ;H 00439 ; 00440 ; Command line input buffer & AUTO buffer area 00441 ; 0420 0D 00442 INBUF$ DB 0DH ;Input buffer - 80 bytes 0421 00 00443 DC 79,0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00012 ' 0 = SYS 04C1 00 00474 DB 0 ;Reserved 04C2 00 00475 DTPMT$ DB 0 ;Date prompt at boot 04C3 00 00476 TMPMT$ DB 0 ;Time prompt at boot 04C4 00 00477 RSTOR$ DB 0 ;Suppress restores on BOOT 04C5 00 00478 DS 2 ;Reserved 00 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00013 ' bit SVC 00550 ; 00551 @CKBRKC 0553 E5 00552 PUSH HL ;Save registers 0554 217400 00553 LD HL,KFLAG$ ;Point to KFLAG$ 0557 CB46 00554 BIT 0,(HL) ;Check break bit 0559 281A 00555 JR Z,NOBRK ; and ret if none 055B F5 00556 PUSH AF ;Save flags 055C C5 00557 PUSH BC 055D D5 00558 PUSH DE 055E CB86 00559 BRKTEST RES 0,(HL) ;Reset the break bit 0560 01000B 00560 LD BC,0B00H ;Wait more than 1/30 0563 CD8203 00561 CALL PAUSE@ ; of a second 0566 CB46 00562 BIT 0,(HL) ;Test the bit again 0568 20F4 00563 JR NZ,BRKTEST ;Loop until gone 056A 110802 00564 LD DE,KIDCB$ ;Point at keyboard & 056D 3E03 00565 LD A,03 ; clear buffer with 056F CD2306 00566 CALL @CTL ; control 3 call 0572 D1 00567 POP DE 0573 C1 00568 POP BC ;Recover registers 0574 F1 00569 POP AF ;Recover FLAGS 0575 E1 00570 NOBRK POP HL 0576 C9 00571 RET 00572 ; 00573 ; Keyboard line input routine 00574 ; 00575 *MOD 00576 ; 00577 ; Backspace to beginning of line 00578 ; 0577 CDDB05 00579 $C4 CALL $C6 ;Backspace 057A 2B 00580 DEC HL ;Get the char prior 057B 7E 00581 LD A,(HL) ; to the current 057C 23 00582 INC HL 057D FE0A 00583 CP 0AH ;Return if line feed 057F C8 00584 RET Z 0580 78 00585 $C5 LD A,B ;Check for empty buffer 0581 B9 00586 CP C 0582 20F3 00587 JR NZ,$C4 ;Loop if not 0584 C9 00588 RET ; else return 0585 E5 00589 @KEYIN PUSH HL ;Save buffer pointer MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00017 ' character if PUT or CTL 00705 ; DE => Device control block 00706 ; 00707 *MOD 0623 C5 00708 @CTL PUSH BC 0624 0604 00709 LD B,4 ;Bit 2, CTL 0626 1820 00710 JR IOBGN 0628 CD3506 00711 @KEY CALL @KBD ;Scan the keyboard 062B C8 00712 RET Z ;Ret if key available 062C B7 00713 OR A ;Return if error 062D 28F9 00714 JR Z,@KEY 062F C9 00715 RET 0630 110302 00716 @JCL LD DE,JCLCB$ ;JCL file FCB 0633 1803 00717 JR @GET 0635 110802 00718 @KBD LD DE,KIDCB$ ;Keyboard DCB 0638 C5 00719 @GET PUSH BC 0639 0601 00720 LD B,1 ;Bit 0, GET 063B 180B 00721 JR IOBGN 063D 111802 00722 @PRT LD DE,PRDCB$ ;Printer DCB 0640 1803 00723 JR @PUT 0642 111002 00724 @DSP LD DE,DODCB$ ;Video DCB 0645 C5 00725 @PUT PUSH BC 0646 0602 00726 LD B,2 ;Bit 1, PUT 0648 DDE5 00727 IOBGN PUSH IX ;Save the registers 064A E5 00728 PUSH HL 064B D5 00729 PUSH DE ;Xfer DCB to IX 064C DDE1 00730 POP IX 064E D5 00731 PUSH DE 064F 4F 00732 LD C,A ;Xfer the I/O char 0650 218006 00733 LD HL,@RSTREG ;Restore register routine 0653 3A0202 00734 LD A,(LBANK$) ;If bank 0 is not 0656 B7 00735 OR A ; resident, need to 0657 280E 00736 JR Z,$D0 ; get it resident! 00737 ; 00738 ; Some other bank is resident - invoke bank 0 00739 ; 0659 C5 00740 PUSH BC ;Save reg again 065A AF 00741 XOR A ;Prepare for bank-0 065B 47 00742 LD B,A 065C 4F 00743 LD C,A 065D CD7708 00744 CALL @BANK ;Invoke bank-0 0660 60 00745 LD H,B ;Get old bank data MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00020 ' multiplicand 00819 ; A => multiplier 00820 ; HLA <= 24-bit result 00821 ; DE destroyed 00822 ; 06C9 C5 00823 @MUL16 PUSH BC ;Save reg BC 06CA EB 00824 EX DE,HL ;Multiplicand to DE 06CB 4F 00825 LD C,A ; & multiplier to C 06CC 210000 00826 LD HL,0 ;Init value to zero 06CF 7D 00827 LD A,L ; in regs HLA 06D0 0608 00828 LD B,8 ;Init for 8-bit mult 06D2 29 00829 $E1 ADD HL,HL ;Shift to next place 06D3 17 00830 RLA ;Use A for bits 16-23 06D4 CB01 00831 RLC C ;Multiply this bit? 06D6 3003 00832 JR NC,$E2 ;Go if not 06D8 19 00833 ADD HL,DE ;Else add multiplicand 06D9 CE00 00834 ADC A,0 ; & any overflow to 16 06DB 10F5 00835 $E2 DJNZ $E1 ;Loop for 8 bits 06DD 4F 00836 LD C,A ;Tempy save 06DE 7D 00837 LD A,L ;Xfer low-order to A 06DF 6C 00838 LD L,H ;Xfer mid-order to L 06E0 61 00839 LD H,C ;Xfer hi-order to H 06E1 C1 00840 POP BC 06E2 C9 00841 RET 00842 ; 00843 ; Divide HL by A - SVC 94 00844 ; HL => dividend 00845 ; A => divisor 00846 ; HL <= resulting quotient 00847 ; A <= remainder 00848 ; 00849 *MOD 06E3 D5 00850 @DIV16 PUSH DE ;Save this reg pair 06E4 57 00851 LD D,A ;Xfer divisor to D 06E5 1E10 00852 LD E,16 ;Init for 16-bits 06E7 AF 00853 XOR A 06E8 29 00854 $F1 ADD HL,HL ;Rotate dividend 06E9 17 00855 RLA ; & subtract divisor if 06EA 3803 00856 JR C,$F2 ; carry into bit-16 06EC BA 00857 CP D ;Compare divisor 06ED 3802 00858 JR C,$F3 ;Go if no subtract 06EF 92 00859 $F2 SUB D ; else subtract divisor 06F0 2C 00860 INC L ;Set lo-order 06F1 1D 00861 $F3 DEC E ;Count down one bit 06F2 20F4 00862 JR NZ,$F1 ;Loop for 16-bits 06F4 D1 00863 POP DE 06F5 C9 00864 RET 00865 ; 00866 ; @HEXDEC - SVC 97 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00024 '<16 X 8 multiply/divide 00867 ; Routine to convert 16-bit hexadecimal to decimal 00868 ; HL => value 00869 ; DE => buffer pointer of 5-character buffer 00870 ; HL <= destroyed (always set to zero) 00871 ; DE <= Buffer+5 00872 ; BC <= destroyed 00873 ; Z <= set 00874 ; 00875 *MOD 06F6 0605 00876 @HEXDEC LD B,5 ;Length max 06F8 3E20 00877 @HEXD LD A,' ' ;Load blank 06FA 12 00878 HEXDEC1 LD (DE),A ;To string 06FB 13 00879 INC DE ;Bump pointer 06FC 10FC 00880 DJNZ HEXDEC1 ;Go for length 06FE D5 00881 PUSH DE ;Save end +1 06FF 1B 00882 DEC DE ;Adjust back 0700 3E0A 00883 HEXDEC2 LD A,10 ;Base to convert to 0702 CDE306 00884 CALL @DIV16 ;HL+A = HL/A 0705 C630 00885 ADD A,'0' ;Add ASCII to result 0707 12 00886 LD (DE),A ; to user string 0708 1B 00887 DEC DE ;Move back 00888 ; 00889 ; Check if done 00890 ; 0709 7C 00891 LD A,H ;Get subtotal remainder 070A B5 00892 OR L ;Done? 070B 20F3 00893 JR NZ,HEXDEC2 ;Go till completed 070D D1 00894 POP DE ;Restore end+1 070E C9 00895 RET ;Return Z 00896 ; 070F 00897 *GET CLOCKS:3 ;Hardware task stuff 00898 ;CLOCKS/ASM - LS-DOS 6.2 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00025 ' user buffer 01009 ; 01010 IF @BLD631 01011 DATELO$ ;<631> 01012 ELSE 01013 @DATE 01014 ENDIF 07A8 113500 01015 LD DE,DATE$+2 07AB 0E2F 01016 LD C,'/' 07AD 18E3 01017 JR TIME1 01018 ; 07AF 0000 01019 PCSAVE$ DW 00 ;PC at entry to RST 38 01020 ; 01021 ; Dynamic Trace routine 01022 ; 01023 TRACE_INT 07B1 B307 01024 DW $+2 07B3 2AAF07 01025 LD HL,(PCSAVE$) 07B6 EB 01026 EX DE,HL ;Program counter to DE 07B7 CD1708 01027 CALL ENADIS_DO_RAM ;Bring up the video 07BA 213EF8 01028 LD HL,CRTBGN$+62 ;Crt trace adr 01029 ; 01030 ; Hexadecimal display routine 01031 ; 07BD 7A 01032 @HEX16 LD A,D ;Convert reg D to 07BE CDC207 01033 CALL @HEX8 ; two hex digits 07C1 7B 01034 LD A,E ;Convert reg E to 07C2 F5 01035 @HEX8 PUSH AF ; two hex digits 07C3 1F 01036 RRA ;Do left nybble first 07C4 1F 01037 RRA 07C5 1F 01038 RRA 07C6 1F 01039 RRA 07C7 CDCB07 01040 CALL HXD1 ;Bits 0-3 stuffed in hex 07CA F1 01041 POP AF ;Reget the byte 07CB E60F 01042 HXD1 AND 0FH ; & use right nybble 07CD C690 01043 ADD A,90H ;Convert nybble to hex 07CF 27 01044 DAA 07D0 CE40 01045 ADC A,40H 07D2 27 01046 DAA 07D3 77 01047 LD (HL),A ;Stuff in (HL) 07D4 23 01048 INC HL 07D5 C9 01049 RET 01050 ; 01051 ; Scan for PAUSE or BREAK & set KFLAG$ 01052 ; F480 01053 SHIFT EQU 0F480H 01054 IF @USA F401 01055 KB1 EQU 0F401H MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00029 ' depressed? 0807 F5 01098 PUSH AF 0808 280B 01099 JR Z,KCK2 ;Go if not 080A 3809 01100 JR C,KCK2 ;Ignore if shifted 080C 3A7C00 01101 LD A,(SFLAG$) ;Permit break bit only 080F CB67 01102 BIT 4,A ; if BREAK enabled? 0811 2002 01103 JR NZ,KCK2 0813 CBC6 01104 SET 0,(HL) ;Turn on BREAK bit 0815 F1 01105 KCK2 POP AF ;C=shift, NZ=break 0816 C9 01106 RET 01107 ; MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00030 ' transfer address for function B=0 01177 ; C => Bank request <0-2>; Set bit 7 to transfer 01178 ; B => Request function 01179 ; 0 => Select bank C 01180 ; 1 => Reset in-use bit of bank C 01181 ; 2 => Test in-use bit of bank C 01182 ; 3 => Set in-use bit of bank C 01183 ; 01184 *MOD 01185 @BANK 0877 E67F 01186 AND 7FH ;Strip possible bit 7 0879 FE03 01187 CP 2+1 ;Bank out of range? 087B D2ED0D 01188 JP NC,PERR 087E 05 01189 DEC B ;Check option 087F FAB308 01190 JP M,$J3 ;Go if bank select 0882 0E86 01191 LD C,86H ;Set for reset BUR$ 0884 2819 01192 JR Z,$J1 ;Go if function 1 0886 0E46 01193 LD C,46H ;Set for test BUR$ 0888 05 01194 DEC B 0889 2814 01195 JR Z,$J1 ;Go if function 2 088B 05 01196 DEC B 088C 2809 01197 JR Z,$J0 ;Go on set BUR$ 088E 05 01198 DEC B 088F C2ED0D 01199 PERRX JP NZ,PERR ;SVC parameter error 0892 3A0202 01200 LD A,(LBANK$) ;P/u current bank 0895 BF 01201 CP A 0896 C9 01202 RET 0897 47 01203 $J0 LD B,A ;Save the bank requested 0898 CD9F08 01204 CALL $J1 ;Test if in use already 089B C0 01205 RET NZ ;Back if error 089C 78 01206 LD A,B ;Reget the request # 089D 0EC6 01207 LD C,0C6H ;Set for set BUR$ 089F E607 01208 $J1 AND 7 ;Strip to bank 0-7 08A1 07 01209 RLCA ;Shift <0-2> to <3-5> 08A2 07 01210 RLCA MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00032 ' X'7FFE' 08BC FE01 01226 CP 1 ;Change <0, 1, 2, 3> 08BE 17 01227 RLA ; to <1, 2, 4, 6> 08BF 47 01228 LD B,A ; & save for later 08C0 3A0102 01229 LD A,(BAR$) ;P/u Bank Avail Ram 08C3 A0 01230 AND B ;Is the bank installed? 08C4 20C9 01231 JR NZ,PERRX ;Error if not in machine 08C6 78 01232 LD A,B ;Get the requested bank 08C7 1F 01233 RRA ;Change <1, 2, 4> to 08C8 3F 01234 CCF ; <0, 2, 3> {CF on 0 08C9 CE00 01235 ADC A,0 ; switched to 2 & 4} 08CB 07 01236 RLCA ;Shift bits 0-1 08CC 07 01237 RLCA ; to 4-5 (MBIT0,1) 08CD 07 01238 RLCA 08CE 07 01239 RLCA 08CF 47 01240 LD B,A ;Save bit mask 08D0 3A7800 01241 LD A,(OPREG$) ;P/u current memory 08D3 E68F 01242 AND 08FH ; configuration & 08D5 B0 01243 OR B ; mask off old & 08D6 327800 01244 LD (OPREG$),A ; merge the new 08D9 D384 01245 OUT (@OPREG),A ;Switch the hardware 08DB 3A0202 01246 LD A,(LBANK$) ;Get old bank # 08DE 47 01247 LD B,A ; & save it 08DF 79 01248 LD A,C ;P/u new bank # 08E0 E67F 01249 AND 7FH ;Strip any bit-7 08E2 320202 01250 LD (LBANK$),A ; & save new bank # 08E5 A9 01251 XOR C ;Keep bit-7 08E6 B0 01252 OR B ;Merge in new bank # 08E7 4F 01253 LD C,A ; & replace into C 08E8 CB79 01254 BIT 7,C ;Transfer to new bank? 08EA 0600 01255 LD B,0 ;Init for invoke later 08EC C8 01256 RET Z ;No if bit-7 = 0 08ED E3 01257 EX (SP),HL ;Exchange RET with new 08EE BF 01258 CP A ; transfer & go to it 08EF C9 01259 RET 08F0 01260 @$SYS EQU $ ;Pointer for @GTMOD 01261 IF @USA 08F0 01262 *GET KIDVR:3 ;Keyboard driver MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00033 ' 1D 1F 1F 090C 80 01295 DB 80H,0,0BH,1BH ; 00 0B 1B 0910 0A 01296 DB LF,1AH,8,18H ; 1A 08 18 0914 09 01297 DB 9,19H,20H,20H ; 19 20 20 0918 81 01298 DB 81H,91H,82H,92H ; 91 82 92 091C 83 01299 DB 83H,93H ; 93 01300 ; 01301 ; Table to generate 5B-5F, 7B-7F 01302 ; 091E 2C 01303 SPCLTB DB ',/.;',CR 2F 2E 3B 0D 01304 ; 01305 ; Entry to keyboard driver 01306 ; MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00036 ' 092D F5 01316 PUSH AF ;Save flag state 092E FE3A 01317 CP ':' 0930 2802 01318 JR Z,$K1 ;Go if screen print 0932 F1 01319 POP AF 0933 C9 01320 RET 01321 ; 01322 ; Perform a screen print 01323 ; 0934 F1 01324 $K1 POP AF ;Clean the stack 0935 3A6D00 01325 @VDPRT LD A,(DFLAG$) ;Check on Graphic bit 0938 07 01326 RLCA 0939 3E3E 01327 LD A,3EH ;Init for LD a,'.' 093B 3002 01328 JR NC,$+4 ;Go if not Graphic 093D 3EFE 01329 LD A,0FEH ;Change to CPR n 093F 325C09 01330 LD ($K4),A ;Stuff cpr or ld 0942 217400 01331 LD HL,KFLAG$ ;Reset the BREAK bit 0945 CB86 01332 RES 0,(HL) 0947 E5 01333 PUSH HL ;Save on stack 0948 210000 01334 LD HL,0 ;Init for row,col 094B 0601 01335 $K2 LD B,1 ;Get a character at the 094D CD990B 01336 CALL @VDCTL ; row-H, col-L 0950 2027 01337 JR NZ,$K6 ;Go on error 0952 FE20 01338 CP 20H 0954 3002 01339 JR NC,$+4 ;Convert control codes 0956 C640 01340 ADD A,40H ; to cap A-Z, + 0958 FE80 01341 CP 80H ;Cvrt anything from X'80' 095A 3802 01342 JR C,$K5 ; thru X'FF' to a '.' 095C 3E2E 01343 $K4 LD A,'.' ; unless graphic bit set 095E CD3D06 01344 $K5 CALL @PRT ;Print the char & loop 0961 2016 01345 JR NZ,$K6 0963 2C 01346 INC L ;Bump column counter 0964 7D 01347 LD A,L ;Check for end-of-line 0965 D650 01348 SUB 80 0967 20E2 01349 JR NZ,$K2 ;Loop if not EOL 0969 6F 01350 LD L,A ;Reset to column 0 096A 2D 01351 DEC L ;Adj for CR force 096B E3 01352 EX (SP),HL ;Get KFLAG$ 096C CB46 01353 BIT 0,(HL) ;Exit with A=0 on 096E E3 01354 EX (SP),HL ; entrance of BREAK 096F 2008 01355 JR NZ,$K6 0971 24 01356 INC H ;Bump row counter 0972 7C 01357 LD A,H ;Test for end of screen 0973 FE18 01358 CP 24 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00037 ' - If caps lock or , 01450 ; Convert to caps unless CLEAR 01451 ; 09F7 CB53 01452 BIT 2,E ;CTRL key down? 09F9 2018 01453 JR NZ,CTLA2Z ;CTRL sets <00-1A> 09FB FE60 01454 CP 60H ;Invert @ and ` 09FD 2004 01455 JR NZ,$L7 09FF EE20 01456 XOR 20H ;Invert & bypass test 0A01 180A 01457 JR $L8 ; for CAPs lock 0A03 DDCB0A4E 01458 $L7 BIT 1,(IX+KBROW6) ;If CLEAR, don't test 0A07 2004 01459 JR NZ,$L8 ; for CAPs lock 0A09 CB6E 01460 BIT 5,(HL) ;Caps lock? 0A0B 2031 01461 JR NZ,TGLCASE 0A0D CB43 01462 $L8 BIT 0,E ;Shift key down? MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00039 ' disable 0A44 217C00 01495 LD HL,SFLAG$ ;Break disabled? 0A47 CB66 01496 BIT 4,(HL) 0A49 2007 01497 JR NZ,$L11B ;Don't set bit if disabl 0A4B 217400 01498 LD HL,KFLAG$ 0A4E CBC6 01499 SET 0,(HL) ; otherwise set it 0A50 1801 01500 JR $L11A 0A52 17 01501 $L11B RLA ;Rotate bit-7 out 0A53 DDCB0A4E 01502 $L11A BIT 1,(IX+KBROW6) ;CLEAR key pressed? 0A57 280E 01503 JR Z,NOTALPH ;Go if not down 0A59 57 01504 LD D,A ;Save code 0A5A CBAF 01505 RES 5,A ;Set to upper-case for 0A5C D641 01506 SUB 'A' ; test A-Z 0A5E FE1A 01507 CP 'Z'-'A'+1 0A60 7A 01508 LD A,D ;Get back actual char 0A61 3002 01509 JR NC,$+4 ;Go if not A-Z 0A63 EE20 01510 XOR 20H ;Shift keyboard case 0A65 F680 01511 OR 80H ;Set bit 7 for CLEAR key 0A67 CB43 01512 NOTALPH BIT 0,E ;SHIFT key down? 0A69 2819 01513 JR Z,FIXCLR ;Go if not 0A6B FE9F 01514 GOTSHFT CP 9FH ;Shift-clear? MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00040 '80 0B0E BE 01618 CP (HL) ; after INC MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00042 ' 0B42 F5 01657 PUSH AF 0B43 E5 01658 PUSH HL 0B44 CC660B 01659 CALL Z,$M6 ;If so clear type buf 0B47 E1 01660 POP HL ;Restore 0B48 F1 01661 POP AF 0B49 FEC0 01662 CP 0C0H ;If CLEAR @, reset keybuf 0B4B 2819 01663 JR Z,$M6 0B4D 5E 01664 LD E,(HL) ;P/u PUTPTR & compare 0B4E 7B 01665 LD A,E ;GETPTR 0B4F 23 01666 INC HL 0B50 BE 01667 CP (HL) 0B51 2821 01668 JR Z,$M8 ;Jump if key buffer empty 0B53 3A2C00 01669 LD A,(TIMER$) ;Check if we expired the 0B56 DD8603 01670 ADD A,(IX+RPTRATE) ; time interval between MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00043 '80 0B84 BE 01705 CP (HL) 0B85 D0 01706 RET NC ;Back if not over 80 0B86 72 01707 LD (HL),D ; else reset to 1st 0B87 C9 01708 RET ; position in buf (0) 01709 ; 01710 ; Type ahead buffer area 01711 ; FF80 01712 TYPBUF EQU 0FF80H 01713 ; 01714 ; TYPBUF+0 = On/Off Flag 01715 ; TYPBUF+1 = Storage pointer 01716 ; TYPBUF+2 = Retrieve pointer 01717 ; TYPBUF+3 = Start of actual buffer 01718 ; 0B87 01719 KILAST EQU $-1 01720 ENDIF 01721 IF @GERMAN 01722 FREN EQU 00 MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00044 ' 0C0H 01791 ; 0BBE DDCB005E 01792 BIT TABS,(IX+DO_MASK) ;Tabs or spec chars 0BC2 2826 01793 JR Z,DO_TABS ;Go if video tabs 01794 ; 01795 ; Character is not tab expansion - do it 01796 ; 0BC4 CDB80C 01797 DONORM CALL DO_DSPCHAR ;Display the char 0BC7 DDCB00A6 01798 RES CTL,(IX+DO_MASK) ;Turn off CTL bit 0BCB C1 01799 DO_RET POP BC ;Get orig char 0BCC F3 01800 DO_RET1 DI ;Disable intr 0BCD 3A970B 01801 LD A,(CRSAVE) ;If a cursor is on, then 0BD0 B7 01802 OR A ; we need to save the 0BD1 2810 01803 JR Z,$N1 ; current char & display 0BD3 1A 01804 LD A,(DE) ; the cursor character 0BD4 32970B 01805 LD (CRSAVE),A ;Save current char 0BD7 3A7F00 01806 LD A,(VFLAG$) ;Allow tasker to blink 0BDA CBBF 01807 RES 7,A 0BDC 327F00 01808 LD (VFLAG$),A 0BDF 3A980B 01809 LD A,(CRSCHAR) ;P/u cusor character 0BE2 12 01810 LD (DE),A ;Put it on the screen 0BE3 ED53950B 01811 $N1 LD (CURSOR),DE ;Update cursor position 0BE7 BF 01812 CP A ;Clear status 0BE8 79 01813 LD A,C ;Restore the char 0BE9 C9 01814 RET 01815 ; 01816 ; Perform a tab expansion {C0H-FFH} 01817 ; 01818 DO_TABS 0BEA D6C0 01819 SUB 0C0H ;Compute spaces 0BEC 28DD 01820 JR Z,DO_RET ;Forget it if TAB(0) 0BEE 47 01821 LD B,A ;Display requested 0BEF 0E20 01822 $N2 LD C,' ' ; number of spaces 0BF1 CDB80C 01823 CALL DO_DSPCHAR 0BF4 10F9 01824 DJNZ $N2 0BF6 18D3 01825 JR DO_RET 01826 ; 01827 ; Routine to move the cursor to begin of line {29} 01828 ; 01829 CRSBOL 0BF8 EB 01830 EX DE,HL ;Cursor addr to HL 0BF9 CDF40D 01831 CALL ADDR1 ;Find row,col 0BFC 6F 01832 LD L,A ;Set col to start 0BFD C3D00D 01833 JP ROWCOL_2_ADDR ;Calc address of BOL 01834 ; 01835 ; Routines to turn on/off the cursor {14/15} 01836 ; 0C00 1A 01837 CRSON LD A,(DE) ;Get screen character MISOSYS EDAS-4.3 04/11/99 19:02:04 LOWCORE - LS-DOS 6.2 Page 00048 '