IMD 1.18: 13/11/2012 19:24:29 nec apc turbodos do/gen/par/.a/.o files dshd  CP/M-86 3ȎЎ؎>RYXQ!Q$YPQU2R6>P>YXÉNÀ>VVW^YWZ]QZ]RVZYQ^]]]à uD $t@ <u 9 <u, 2âà uQYQ YQ>t Y<t< s t<u< uÀ u $uñ <$tAQYàMMËRâ ð 'QYÊ tKډ/ &< t 3 36 4 t |IDKD6 Rȋ6 - Y/ "B*AËـ><tًȵDËD Ê"DFB"# ؉DË úBڊ@$"A4<u2Bڠ@ù2CQY á $Ë  'B ڊs?t 3HË ËI;rBR+ӋZñK+sQLKYt :t s\È. N^  S ; RÍIC:uûIË'ICI`sI$QYH u@QYHрŠ$QY Ȋ$يQYR$Y QȈYQZuR><tQSQCS t %;r[CYϋ%CˋC)t;J?t:u C,$uȢ oZѠ3FQ.$""*$Y378td8<t u u:uFڋ;u2BCBCuùهً:rهي1 6 | tڻڱ2Cu ڈ}21!It $t$""1t &$t&Su2twt 2ghZ42B:@r u1=t ?$S,[urIP5=$Ȣ5<s>?$ 3ۉ |y2>=t? t >5t>TuO ÊBdos Err On : $Bad Sector$Select$File R/O$<aa 8LWWz.BDstȎЎ؎V.>uJu uH<tHJÀ>tHðàÈÊtCû&&@ÈGر رmkG_G`]<uM: m&%u &u k>ku?@ABDDOKID SYS2CD DDOKID SYSTABLE DIRECHART DIR CPM SYSCPM SYSx !"#PIP CMD;$%&'APCEQU A CON192 A CON96 A DEBUGAPCA DREQUATEA  STDSPOOLO STDSPOOLO SUBMIT O TDOSAPC O TSTPTN O TDOSAPC DO HDCTST GENLSTTST GENXREF86 CMDXREF86 CMD DRIVE CMDRUN CMDGIOSTESTCMD{CRTDUMP CDWCONFIG CMDdGPLAN CMDDSKAPC A DSKAPC A :()DSKFMT A P*+,-.EQUATE A 2/012GOOD A 3456789:GOOD A Q;<=>?@HDCAPC A ABCDEFGHHDCAPC A IJKLMNOPSCRTST GENSIOTST GENSIOTST1 GENTDOSAPC GENTDOSAPCPGENTLOADAPCGENTDOSAPC PARTLOADAPCPARGPLAN CMDGPLAN CMDLIB86 CMDg$$$ SUBAPCMASTRGENHELP HLP HELP HLPw FORTUNE TBL HDCAPC A QRHDCTST A SHDCTST1 A TJUNK A UVWXYZ[\JUNK A Z]^_`abKBDAPC A mcdefghiLST300 A jLSTAPC A )klm--README SCRAPE A TYPE PO POLYVUE1PMPOLYVUE2PMCON192 O CON96 O CPMSUP O TDOSAPC SYSLSTCTS A nLSTETX A opLSTPPA A %qrsLSTTST A tLSTXON A uvMSTAPC A wNITAPC A 'xyzRTCAPC A {|DEBUGAPCO DSKAPC O DSKFMT O !KBDAPC O "MSTAPC O #NITAPC O $PATCH O %RTCAPC O &SCRAPC A }~SCRAPC A SCRTST A SIOAPC A vSIOTST A SIOTST1 A SOMAPC A TSTPTN A RTCNUL O 'SCRAPC BAK (SCRTST O )SIOAPC O *SOMAPC O +STDLOADRO ,-./0123STDLOADRO 45STDSPOOLO 6789:;<=APCEQU O CON192 O CON96 O CPMSUP O DEBUGAPCO DSKAPC O DSKFMT O HDCAPC O STDSPOOLO >?@ABCDESTDSPOOLO FSUBMIT O GTSTPTN O HLDCOPY CMD@IJKLPIP CMD;MNOPHELP CMD4QRSTDISP1 CMD5UVWXHDCTST O HDCTST1 O KBDAPC O LST300 O LSTAPC O LSTCTS O LSTETX O LSTPPA O ASM86 CMDYZ[\]^_`ASM86 CMDMabcdeSTAT CMDIfghijDISP CMD5klmnTIMEROFFCMDoTIMERON CMDpSUBMIT CMDqrPOW CMDsLSTTST O LSTXON O MSTAPC O NITAPC O PATCH O RTCAPC O RTCNUL O SCRAPC O COUNTRY CMDTtuvwxyTODEX CMD zSETCOM CMD{|VISUAL CMD }FORMAT CMDO~BACH CD DDT86 CMDmED CMDHSCRTST O SIOAPC O SIOTST O SIOTST1 O SOMAPC O STDLOADRO STDLOADRO STDSPOOLO COPYDISKCMDCOPYDISKCMDKEY CMD1CHR CMDfLOADER CMD4HDFORMATCD0HDBACKUPCDHDBACKUPCD st register (W) DMA_WSM == 0X0B ; write single mask (W) DMA_MODE== 0X1B ; write mode (W) DMA_CFF == 0X0D ; clear flip flop (W) DMA_RTR == 0X1D ; read temp register (R) DMA_MC == 0X1D ; master clear (W) DMA_WAM == 0X1F ; write all mask (W)ster (W) ; ; ; Parallel list port ; PAR_CMD == 0X6E ; command register (RW) PAR_STAT== 0X68 ; status register (R) PAR_DATA== 0X6A ; data register (W) PAR_CMD1== 0X6C  ; ; Interrupt controllers (8259) ; MIC_P0 == 0X20 ; master IC port 0 MIC_P1 == 0X22 ; master IC port 1 SIC_P0 == 0X28 ; slave IC port 0 SIC_P1 == 0X2A ; slave IC port 1 ; ; Interval timer (8253) ; IT_CNT0 == 0X2B ; counter port 0 (RW) ; command register (W) #RELIST ; restore listing status  IT_MOD0 == 0X2F ; counter mode port 0 (W) IT_CNT1 == 0X61 ; counter port 1 (RW) IT_MOD1 == 0X67 ; counter mode port 1 (W) ; ; Serial I/O controllers (8251) ; S0_DATA == 0X30 ; data (RW) S0_STAT == 0X32 ; status (R) S0_CMD == 0X32 ; command (W) S0_MSK == 0X34 ; mask (W) S0_RS == 0X34 ; read signal (R) S0_WS == 0X36 ; write signal (W) S1_DATA == 0X31 ; data (RW) S1_STAT == 0X33 ; status (R) S1_CMD == 0X33 ; command (W) S1_MSK == 0X35 ; mask (W) S1_RS == 0X35 ; read signal (R) S1_WS == 0X37 ; write signal (W) ; ; CRT controller ; CRT_STAT== 0X40 ; status (R) CRT_PARM== 0X40 ; parameter (W) CRT_DATA== 0X42 ; data (R) CRT_CMD == 0X42 ; command (W) CRT_IRST#TITLE "TURBODOS OPERATING SYSTEM NULL CONSOLE DRIVER" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "CON192" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVALENCE== 0X46 ; reset interrupt (W) ; ; Graphics display controller ; GRF_STAT== 0X41 ; status (R) GRF_PARM== 0X41 ; parameter (W) GRF_DATA== 0X43 ; data (R) GRF_CMD == 0X43 ; command (W) ; ; Keyboard controller ; KBD_DATA== 0X48 ; data (RS ; LOC Data# ;LOCATE IN DATA SEGMENT ; CONBR:: BYTE 0x8F ;CONSOLE BAUD RATE CODE (19200 BAUD) FFCHR:: BYTE AFF ;FORM FEED CHARACTER INITC: BYTE 0 ;INITIALIZATION COMPLETE FLAG ; LOC Code# ;LOCATE IN CODE SEGMENT ; CONDR_::MOV AL,INITC ;GET IN; #INCLUDE "APCEQU" ; NEC-APC equivalences #NOLIST ; suppress listing ; ; Port addresses ; ; DMA controller (8237) ; CH0_ADR == 0X01 ; CH-0 address (RW) CH0_EXA == 0X38 ; CH-0 extended address (W) CH0_TC == 0X11 ; CH-0 terminal count ) KBD_BZS == 0X48 ; buzzer set (W) KBD_STAT== 0X4A ; status (R) KBD_BZR == 0X4A ; buzzer reset (W) KBD_SIG == 0X4C ; read signal (R) KBD_BP == 0X4E ; read book/page (R) KBD_SH == 0X4E ; read shift (R) ; ; Floppy disk drive controller ;IT COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __CDRV ;IF SO, CONTINUE CALL __INIT ;ELSE, INITIALIZE CONSOLE CHANNEL __CDRV: MOV AL,DL ;GET FUNCTION NUMBER SUB AL,=8 ;FUNCTION NUMBER=8? JZ CONSO ;IF SO, ERROR SHIFT OUT DEC (RW) CH1_ADR == 0X03 ; CH-1 address (RW) CH1_EXA == 0X3A ; CH-1 extended address (W) CH1_TC == 0X13 ; CH-1 terminal count (RW) CH2_ADR == 0X05 ; CH-2 address (RW) CH2_EXA == 0X3C ; CH-2 extended address (W) CH2_TC == 0X15 ; CH-2 terminal  FDD_STAT== 0X50 ; read status (R) FDD_DATA== 0X52 ; data (RW) FDD_CMD == 0X52 ; command (W) ; ; Clock and calendar device ; CLK_DATA== 0X58 ; read data (R) CLK_SET == 0X58 ; set register (W) ; ; Arithmetic processing unit ; APU_DATA=AL ;FUNCTION NUMBER=9? JZ CONSI ;IF SO, ERROR SHIFT IN JMP SERIAL# ;ELSE, CONTINUE __INIT: MOV INITC,=0xFF ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,CONBR ;GET CONSOLE BAUD RATE CODE count (RW) CH3_ADR == 0X07 ; CH-3 address (RW) CH3_EXA == 0X3E ; CH-3 extended address (W) CH3_TC == 0X17 ; CH-3 terminal count (RW) DMA_ST == 0X09 ; status register (R) DMA_CMD == 0X09 ; command register (W) DMA_WRR == 0X19 ; write reque= 0X5A ; data register (RW) APU_STAT== 0X5E ; read status (R) APU_CMD == 0X5E ; write command (W) ; ; Melody processing unit ; MEL_STAT== 0X60 ; status register (R) MEL_CMD == 0X60 ; command regi MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE MOV AL,FFCHR ;GET FORM FEED CHARACTER TEST AL,AL ;FORM FEED CHARACTER=0? JZ __NITX ;IF SO, CONTINUE POP CX ;ELSE, RESTORE CHANNEL NUMBER PUSH CX ;SAVE CHANNEL NUMBER MOV CL ;FORM FEED CHARACTER TO C-REG MOV DL,=2 ;SET FUNCTION NUMBER=2 CALL SERIAL# ;OUTPUT FORM FEED __NITX: POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER RET ;DONE ; CONSO: CONSI: CALL DMS# ;POSITION TO NEXT LINE BYTE A,AL ;FORM FEED CHARACTER TO C-REG MOV DL,=2 ;SET FUNCTION NUMBER=2 CALL SERIAL# ;OUTPUT FORM FEED __NITX: POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER RET ;DONE ; CONSO: CONSI: CALL DMS# ;POSITION TO NEXT LINE BYTCR,ALF,0 RET ;DONE ; END E ACR,ALF,0 RET ;DONE ; END ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVALENCES #NOLIST ;SUPPRESS LISTING ; ; ASCII EQUIVALENCES ; ANUL == BYTE 0x00 ;NULL ASOH == BYTE 0x01 ;SOH ASTX == BYTE 0x02 ;STX AETX == BYTE 0x03 ;ETX AEOT == BYTE 0x04 ;EOT AENQ == BYTE 0x05 ;ENQ ; DEBUGM: POP AX PUSH BX MOV BX,AX CALL DEBUGMBX MOV AX,BX POP BX JMPI AX ; DEBUGMBX: CS MOV AL,[BX] ; load message byte INC BX ; bump pointer TEST AL,AL ; end of message JZ __X ; if so, exit PUSH BX MOV CL,AL ; char to AACK == BYTE 0x06 ;ACK ABEL == BYTE 0x07 ;BELL ABS == BYTE 0x08 ;BS AHT == BYTE 0x09 ;HT ALF == BYTE 0x0A ;LF AVT == BYTE 0x0B ;VT AFF == BYTE 0x0C ;FF ACR == BYTE 0x0D ;CR ASO == BYTE 0x0E ;SO ASI == BYTE 0x0F ;SI ADLE == BYTE 0x10 ;DLE ADC1 ==#TITLE "TURBODOS OPERATING SYSTEM NULL CONSOLE DRIVER" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "CON96" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVALENCES reg CALL SCREEN# POP BX JMPS DEBUGMBX ; __X: RET ;  BYTE 0x11 ;DC1 ADC2 == BYTE 0x12 ;DC2 ADC3 == BYTE 0x13 ;DC3 ADC4 == BYTE 0x14 ;DC4 ANAK == BYTE 0x15 ;NAK ASYN == BYTE 0x16 ;SYN AETB == BYTE 0x17 ;ETB ACAN == BYTE 0x18 ;CAN AEM == BYTE 0x19 ;EM ASUB == BYTE 0x1A ;SUB AESC == BYTE 0x1B ;ESC A ; LOC Data# ;LOCATE IN DATA SEGMENT ; CONBR:: BYTE 0x8E ;CONSOLE BAUD RATE CODE (9600 BAUD) FFCHR:: BYTE AFF ;FORM FEED CHARACTER INITC: BYTE 0 ;INITIALIZATION COMPLETE FLAG ; LOC Code# ;LOCATE IN CODE SEGMENT ; CONDR_::MOV AL,INITC ;GET INIT FS == BYTE 0x1C ;FS AGS == BYTE 0x1D ;GS ARS == BYTE 0x1E ;RS AUS == BYTE 0x1F ;US ASP == BYTE 0x20 ;SPACE ARUB == BYTE 0x7F ;RUBOUT (DEL) ; LOC 0 ;SYMBOLIC DEFINITIONS RELATIVE TO 0 ; PDRDP: ;PD REQUEST DESCRIPTOR PACKET PDRFCN: RES BYTE 1 ;PCOMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __CDRV ;IF SO, CONTINUE CALL __INIT ;ELSE, INITIALIZE CONSOLE CHANNEL __CDRV: MOV AL,DL ;GET FUNCTION NUMBER SUB AL,=8 ;FUNCTION NUMBER=8? JZ CONSO ;IF SO, ERROR SHIFT OUT DEC AL D REQUEST FUNCTION NUMBER PDRDRV: RES BYTE 1 ;PD REQUEST DRIVE NUMBER PDRTRK: RES WORD 1 ;PD REQUEST TRACK NUMBER PDRSEC: RES WORD 1 ;PD REQUEST SECTOR NUMBER PDRSC: RES WORD 1 ;PD REQUEST SECTOR COUNT PDRTC: RES WORD 1 ;PD REQUEST TRANSFER COUNT PDR;FUNCTION NUMBER=9? JZ CONSI ;IF SO, ERROR SHIFT IN JMP SERIAL# ;ELSE, CONTINUE __INIT: MOV INITC,=0xFF ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,CONBR ;GET CONSOLE BAUD RATE CODE MOVDMA: RES WORD 1 ;PD REQUEST DMA OFFSET PDRBAS: RES WORD 1 ;PD REQUEST DMA BASE PDRDST: RES WORD 1 ;PD REQUEST DRIVE SPEC TABLE ADDR PDRLEN == BYTE .-PDRDP ;PD REQUEST DESCRIPTOR PACKET LENGTH DSKNFO: ;DISK TYPE INFORMATION BLKSIZ: RES BYTE 1 ;BLOCK  DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE MOV AL,FFCHR ;GET FORM FEED CHARACTER TEST AL,AL ;FORM FEED CHARACTER=0? JZ __NITX ;IF SO, CONTINUE POP CX ;ELSE, RESTORE CHANNEL NUMBER PUSH CX ;SAVE CHANNEL NUMBER MOV CL,AL SIZE NMBLKS: RES WORD 1 ;NUMBER OF BLOCKS NMBDIR: RES BYTE 1 ;NUMBER OF DIRECTORY BLOCKS SECSIZ: RES BYTE 1 ;PHYSICAL SECTOR SIZE (2^N*128) SECTRK: RES WORD 1 ;PHYSICAL SECTORS PER TRACK TRKDSK: RES WORD 1 ;PHYSICAL TRACKS PER DISK RESTRK: RES WORD 1 WORD .-2 ; DWTSPH: ; disk wait semaphore WORD 0 ; semaphore count WORD . ; semaphore P/D head WORD .-2 ; ; 765 read/write table ; RWTBL: DRIVE: BYTE 0 ; drive number TRACK: BYTE 0 ; track number HEAD: BYTE 0 ; head number SECOT AL ; adjust for device MOV CL,=4 ; get shift count SHL AL,CL ; move step value to bits 4-7 OR AL,=HUTVAL ; add in head unload value MOV [BX],AL ; place in table INC BX MOV BYTE [BX],=HLTND ; set HLT and ND MOV CX,=(SCYCMD<<8)|3 ;  ;NUMBER OF RESERVED TRACKS DNFOL == BYTE .-DSKNFO ;DISK INFO LENGTH ; RELOC ;RESTORE PREVIOUS LOCATION ; #RELIST ;RESTORE PREVIOUS LISTING STATUS TOR: BYTE 0 ; sector number N: BYTE 0 ; bytes/sector code EOT: BYTE 0 ; end of track GPL: BYTE 0 ; gap length DTL: BYTE 0 ; data length ; ; 765 format table ; FMTBL: FDRV: BYTE 0 ; format drive number FN: BYTE 0 ; format bytes/sectoget command and length CALL CMDRDY ; issue it ; __X: RET ; end of initialization ; ; ; Driver entry point. ; DSKDR_:: MOV BX,&DMXSPH ; get mutual exclusion semaphore CALL WAIT# ; dispatch if necessary CALL __E ; call the disk drive #TITLE "NEC-APC FLOPPY DISK DRIVER" #SUBTTL "Copyright (c) Multi-Micro Corp." #PAGE 132,66 ; ; DSKAPC.A ; Floppy disk driver for the NEC-APC and TurboDOS. ; ; Version: 6/23/84 ; ; Edit History: ; 6/23/84 jl - Module created. ; 6/24/84 jl - r FSC: BYTE 0 ; format sectors/track FGPL: BYTE 0 ; format gap length (3) BYTE 0XE5 ; format filler byte ; RWSTBL: RES 7 ; read/write status table ; ; read/write GAP length table ; RWGAPS: BYTE 0X07 ; 128 bytes BYTE 0X0E ; 256 bytr PUSH AX ; save results MOV BX,&DMXSPH ; get mutual exclusion semaphore CALL SIGNAL# ; signal process as ready POP AX ; restore results RET ; done ; __E: MOV BL,PDRFCN[SI] ; get PD request function number CMP BL,=NMBFCN ; check mModule assembling but not debugged. ; MODULE "DSKAPC" ; module ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; NEC-APC equivalences ; RETRYS == 5 ; number of retrys FDDIREQ == 11 ; FDD Interrupt request number Ies BYTE 0X1B ; 512 bytes BYTE 0X35 ; 1024 bytes ; TRKTBL: BYTE 0,0,0,0 ; track table (support four drives) ; IOERR: BYTE 0 ; I/O error status byte CURSC: BYTE 0 ; current sector count CURSEC: BYTE 0 ; current sector number CURADR: WOax function number JB __C ; if valid, continue XOR AL,AL ; set error status RET ; and exit ; __C: XOR BH,BH ; make double word ADD BX,BX ; times 2 for table lookup JMPI FCNTBL[BX] ; off to the driver function ; ; ; Function=2, ReNTRPS == 0 ; -1=interrupts, 0=polled ; ; NEC 765 timer equates ; ND == 0 ; set 765 DMA mode HUT == 240 ; head unload timeout HLT == 38 ; head load delay HUTVAL == HUT/16 ; prep for specify command HLTND == ((HLT/2)<<1)|ND ; prep also ; RD 0 ; current DMA address ; SECTC: WORD 0 ; sector terminal count RTYCNT: BYTE 0 ; retry counter (set to number of retrys) RECFL: BYTE 0 ; recal flag (set to number of recals) DMAOP: BYTE 0 ; DMA read, write or verify command FDCOP: BYTE 0turn disk specifications. ; RETDST: CALL RETRDY ; select and return ready condition TEST AL,AL ; drive ready? JNZ __C1 ; if so, continue RET ; else, exit here ; __C1: ; ; Issue a read ID field in single-density and branch to ; good  ; NEC 765 intructions ; SCYCMD == 0X03 ; specify drive parameters SDSCMD == 0X04 ; sense drive status WRCMD == 0X05 ; write sector RDCMD == 0X06 ; read sector RECCMD == 0X07 ; recalibrate SISCMD == 0X08 ; sense interrupt status RIDCMD  ; FDC read or write command ; FLSRT_::BYTE 6 ; drive step rate (patchable) ; ; Function branching table. ; FCNTBL: WORD READ ; function=0, disk read WORD WRITE ; function=1, disk write WORD RETDST ; function=2, return specifications ID read with AL equal to sector code if successful. ; MOV RECFL,=1 ; set recal flag __DST1: MOV CH,=RIDCMD ; get Read ID command CALL READID ; issue it MOV AL,RWSTBL+6 ; get returned sector size (N) JZ __GID ; if good read ID ; ; Now try== 0X0A ; read sector ID FMTCMD == 0X0D ; format a track SKCMD == 0X0F ; seek command ; ; DMA instructions ; DMAWR == 0X15 ; memory write (FDD read) DMARD == 0X19 ; memory read (FDD write) DMAVFY == 0X11 ; memory verify (FDD read) DMAEWORD RETRDY ; function=3, return ready WORD FMTTRK ; function=4, format track NMBFCN == (.-FCNTBL)/2 ; number of supported functions ; ; LOC Code# ; locate in code segment ; ; Driver initialization. ; This entry point is called once at sys a read ID field in double-density and branch to ; good ID read with AL equal to sector code if successful. ; MOV CH,=RIDCMD|(1<<6) ; try double-density next CALL READID ; issue it MOV AL,RWSTBL+6 ; get returned N for FMT sector size PUSHF NA == 0X01 ; channel 1 enable DMADIS == 0X05 ; channel 1 disable ; ; Status register 3 bit definitions ; ST3TS == 1<<3 ; two-sided disk ST3RDY == 1<<5 ; drive ready ; ; Pre-defined type code bits ; TSD == 1<<2 ; two-sided disk DDD == 1tem cold boot time and may ; be used to perform any neccessary device initialization. ; DSKIN_:: ; #IF INTRPS ; if interrupts MOV DX,&FDCISR ; get ISR routine address MOV AL,=FDDIREQ ; get FDD interrupt request number CALL INTENA# ; enabl; save flags OR AL,=DDD ; set double-density type POPF ; restore flags JZ __GID ; if good read ID ; ; Check the recalibrate flag, and recalibrate the drive if first pass ; through this routine. set recal flag to show recal done. ; DEC RE<<3 ; double density disk MINI == 1<<4 ; mini-floppy disk TPI96 == 1<<5 ; quad density mini floppy ; LOC Data# ; locate in data segment ; DMXSPH: ; mutual exclusion semaphore WORD 1 ; semaphore count WORD . ; semaphore P/D head e interrupts from this device #ENDIF ; INTRPS ; IN AL,FDD_STAT ; read 765 status port INC AL ; is it present? JZ __X ; if not, skip init ; MOV BX,&RWTBL ; use RWTBL for transfer MOV AL,FLSRT_ ; get floppy disk step rate DEC AL N CFL ; check recal flag JS FMTERR ; if retries up, continue error CALL RECAL ; do one recalibrate JMPS __DST1 ; and try format look-up again ; ; AL reg contains the format type as far as density and sector size go. ; Now use the sense drive,AL ; store in format table INC BX ; point to gap field MOV AL,BYTE PDRSEC+1[SI] ; get req sector value AND AL,=0X7F ; extract format gap length MOV [BX],AL ; store in format table ; MOV RTYCNT,=RETRYS ; set retry counter __RETRY: MOVSD ; if single-density, continue OR DL,=1<<6 ; set MFM bit-6 in FDC command __SD: TEST BYTE [BX],=TSD ; test double-sided type bit JZ __SS ; if single-sided, continue OR DL,=1<<7 ; set MT bit-7 in FDC command __SS: MOV FDCOP,DL ; store FDC  status command to test for a two sided disk. ; __GID: MOV DL,AL ; hold in register TEST AL,AL ; single density? JNZ __GID1 ; if not, continue MOV AL,RWSTBL+3 ; get cylinder number from results CMP AL,=1 ; track 0 or 1? JA __GID1 ; i AX,PDRBAS[SI] ; get PD request base PUSH AX ; save it MOV CL,=12 SHR AX,CL ; calc extended page MOV DL,AL ; save it POP AX MOV CL,=4 SHL AX,CL ; calc base address ADD AX,PDRDMA[SI] ; add in offset ADC DL,=0 ; add CY into pagecommand ; MOV AL,BYTE PDRSEC[SI] MOV CURSEC,AL ; set current sector MOV AX,PDRDMA[SI] MOV CURADR,AX ; set current address MOV AL,BYTE PDRSC[SI] MOV CURSC,AL ; set current sector count ; ; Lookup the values for the GPL and DTL based on thef not, continue MOV AL,=2 ; load track 2 CALL SEEK1 ; and seek to it JMPS __DST1 ; then check density again ; __GID1: PUSH DX ; save sector type CALL SDS ; sense drive status POP DX ; restore sector type TEST AL,=ST3TS ; test two addr OUT CH1_ADR,AL ; send LSB first MOV AL,AH OUT CH1_ADR,AL ; and MSB second MOV AX,PDRTC[SI] ; get PD request transfer count OUT CH1_TC,AL ; send LSB first MOV AL,AH OUT CH1_TC,AL ; and MSB second MOV AL,DL ; get page addr OUT  current sector size. ; MOV BL,SECSIZ[SI] ; get the sector size value AND BL,=3 ; mask the sector size bits 0&1 MOV N,BL ; set the N field XOR BH,BH ; make double length MOV AL,RWGAPS[BX] ; get GPL entry MOV GPL,AL ; and patch it M sided bit JZ __GID2 ; no, FMT correct OR DL,=TSD ; yes, set two-sided type bit __GID2: ; ; Find proper DPB in list ; MOV BX,&DSTBLS# ; get disk spec tables ; __1: CMP DTCO#[BX],DL ; type code correct? JZ __2 ; if so, continue MOV BCH1_EXA,AL ; send page addr MOV AL,=DMARD ; get DMA read memory command OUT DMA_MODE,AL ; send to mode register MOV AL,=DMAENA ; get DMA enable mask OUT DMA_WSM,AL ; send to mask register ; MOV CX,=(FMTCMD<<8)|6 ; get command and length TOV DTL,=128 ; preset DTL for single-density TEST BL,BL ; sector size=0? JZ __SD1 ; if so, continue MOV DTL,=0XFF ; set for other sector sizes __SD1: MOV IOERR,=0 ; clear I/O error status byte MOV RECFL,=1 ; set the recal flag ; ; SelecX,[BX] ; load spec table link TEST BX,BX ; end of list? JNZ __1 ; if not, continue JMPS FMTERR ; format type not found ; __2: ADD BX,=2 ; skip past table linkage MOV PDRDST[SI],BX ; set disk spec table address OR AL,=0XFF ; set retuEST BYTE PDRSEC[SI],=0X80 ; double density flag set? JZ __1 ; if not, continue OR CH,=1<<6 ; set 765 double density bit __1: CALL CMDRDY ; output command to 765 CALL FLWAIT ; wait for completion MOV AL,RWSTBL ; get returned ST-0 AND AL,=t in drive through ready test routine (RETRDY) ; RWLOOP: CALL RETRDY ; use subroutine TEST AL,AL ; drive ready? JNZ __C1 ; if so, continue NOT AL ; set AL=FF RET ; __C1: CALL SEEK ; seek to proper track ; ; Select either head-0 orrn code=FF RET ; done ; ; Branch here if device read errors or format cannot be found ; FMTERR: XOR AL,AL ; force error status RET ; and exit ; ; ; Function=4, format a track ; FMTTRK: CALL RETRDY ; select drive and return ready 0XC0 ; mask error bits JZ __X ; done if no errors DEC RTYCNT ; another retry? JP __RETRY ; if so, loop OR AL,=0XFF ; else get error return __X: RET ; done ; ; ; Function=0, read disk ; READ: MOV DMAOP,=DMAWR ; set DMA mode to wr head-1 from the format type value. ; MOV DL,CURSEC ; get current sector CALL RETXLT ; return translation table address JZ __NT ; if no translation required XOR DH,DH ; make sector double length ADD BX,DX ; index into table MOV DL,[BXTEST AL,AL ; drive ready? JNZ __C1 ; if so, continue NOT AL ; else, set AL=FF RET ; and exit here ; __C1: TEST BYTE PDRTRK[SI],=0XFF ; PD requested track=0? JNZ __C2 ; if not, continue CALL RECAL ; else, recalibrate drive __C2: CAite memory MOV DL,=RDCMD ; get FDC read command JMPS RWCOM ; and join common code ; ; ; Function=1, write disk ; WRITE: MOV DMAOP,=DMARD ; set DMA mode to read memory MOV DL,=WRCMD ; get FDC write command CALL RWCOM ; use common routi] ; get translated sector __NT: INC DL ; set sector base to 1 MOV DH,BYTE SECTRK[SI] ; get sectors per track value CALL RETTCA ; return type code address TEST BYTE [BX],=TSD ; test double sided disk JZ __SS ; if not, continue SHR DH,=1 LL SEEK ; seek to requested track ; MOV BX,&FDRV ; point to drive number in format table TEST BYTE PDRSEC+1[SI],=0X80 ; head number 1 flag set? JZ __C3 ; if not, continue OR BYTE [BX],=1<<2 ; select head 1 in drive field __C3: INC BX ; pones TEST AL,AL ; test results JZ __C1 ; if good, continue RET ; else, exit here ; __C1: MOV DMAOP,=DMAVFY ; set DMA verify command MOV DL,=RDCMD ; FDC read command ; ; Common routines to both reading and writing. ; RWCOM: ; ; Set u ; find number of sectors per side __SS: MOV BX,&DRIVE AND BYTE [BX],=3 ; reset head select bit MOV HEAD,=0 ; and head match field for 0 CMP DH,DL ; on side 0? JNB __S0 ; if side 0 selected SUB DL,DH ; remove side 1 bias OR BYTE [BX]int to bytes/sector field MOV AL,BYTE PDRSEC[SI] ; get req sector value AND AL,=3 ; extract format sector size MOV [BX],AL ; store in format table INC BX ; point to sectors/track field MOV AL,BYTE PDRSC[SI] ; get req sector count MOV [BX]p the read or write operation for single- or double- ; density as specified by DDD bit of the format type code in ; the drive specification table. ; CALL RETTCA ; return type code address TEST BYTE [BX],=DDD ; test double-density type bit JZ __ ,=1<<2 ; set drive number for head 1 MOV HEAD,=1 ; set head match field for 1 __S0: MOV SECTOR,DL ; set sector MOV EOT,DH ; use as EOT value ; ; Start of reading and writing. NOTE: retry entry point also. ; MOV RTYCNT,=RETRYS ; set retry cT CH1_ADR,AL ; send LSB addr first MOV AL,AH OUT CH1_ADR,AL ; send MSB second CALL RETSSZ ; return current sector size CALL RETXLT ; return translate table and status JNZ __C1 ; if present, cont' with single length MOV AX,PDRTC[SI] ; land is issued and the track field in the RW table set to 0. ; RECAL: MOV CX,=(RECCMD<<8)|2 ; get recal command and length CALL CMDRDY ; issue command CALL FLWAIT ; wait for completion XOR AL,AL MOV TRACK,AL ; reset track field in RW table ounter __RETRY: CALL DMANIT ; setup the DMA device MOV CH,FDCOP ; get FDC command MOV CL,=9 ; length of command CALL CMDRDY ; issue command CALL FLWAIT ; wait for completion interrupt MOV AL,RWSTBL ; get ST-0 AND AL,=0XC0 ; mask eoad PD request transfer count __C1: DEC AX OUT CH1_TC,AL ; send LSB first MOV AL,AH OUT CH1_TC,AL ; send MSB second MOV AL,DL ; get DMA page back OUT CH1_EXA,AL ; send to extended page select MOV AL,DMAOP ; get DMA operation OUT DMA_MO RET ; done ; ; ; Seek to PD requested track number. ; SEEK: MOV AL,BYTE PDRTRK[SI] ; get selected track CMP AL,TRACK ; same as current? JZ SKX ; if so, continue exit SEEK1: MOV TRACK,AL ; put in RW table MOV CX,=(SKCMD<<8)|3 ; get rror bits JZ RWNXT ; if successful operation ; ; Test for a drive not ready condition and branch ; to the error exit routine with the proper result if true. ; TEST BYTE RWSTBL,=1<<3 ; drive not ready? JNZ RWNXT ; if so, continue ; ; Now cheDE,AL ; send current DMA mode MOV AL,=DMAENA ; get channel 1 enable command OUT DMA_WSM,AL ; enable DMA controller RET ; done ; ; ; Function=3, return drive ready status ; RETRDY: MOV AL,PDRDRV[SI] ; get disk number CMP AL,=4 ; testseek command and length CALL CMDRDY ; send command CALL FLWAIT ; wait for completion SKX: RET ; ; ; Issue sense drive status command and retreive results. ; SDS: MOV CX,=(SDSCMD<<8)|2 ; get sense drive status command CALL CMDRDY ; issue ick the wrong cylinder bit in ST-2. If not true, then branch ; to more error routines. If true, then recalibrate the drive and perform ; a re-seek to the selected track. ; TEST BYTE RWSTBL+2,=1<<4 ; wrong cylinder error set? JZ __E1 ; if not, conti for valid drive number JAE __NR ; if invalid, return not ready IN AL,FDD_STAT ; read 765 status port INC AL ; is it present? JZ __NR ; if not, return not ready status CALL DSKSEL ; select in drive CALL SDS ; test drive status TESTt CALL CMDRES ; read results MOV AL,RWSTBL ; get ST-3 RET ; with it ; ; ; Read sector ID field. The B register contains either a single- ; or a double-density read ID command. The command is issued and ; ST-0 error bits mask. ZERO flag is nue DEC RECFL ; recal done? JS __E1 ; if so, skip it CALL RECAL ; recalibrate the drive JMP RWLOOP ; and re-seek selected track ; ; Check the retry counter for zero and perform preset number ; of retrys to read or write a sector. ; __E AL,=ST3RDY ; test ready status JZ __NR ; if not, return not ready OR AL,=0XFF ; set drive ready status RET ; and exit ; __NR: XOR AL,AL ; clear AL for not ready RET ; and exit ; ; ; Drive select subroutine. ; The new drive is cheset if no error occured. ; READID: MOV CL,=2 ; length in C CALL CMDRDY ; issue command CALL FLWAIT ; wait for completion MOV AL,RWSTBL ; get status AND AL,=0XC0 ; mask error bits RET ; with Z set for success ; ; ; Send command to 1: MOV CL,=ABEL ; get bell character CALL CONOUT# ; output to console DEC RTYCNT ; one less retry JP __RETRY ; if not zero ; RWNXT: MOV AL,RWSTBL OR IOERR,AL ; update I/O error flag CALL RETXLT ; return translate table and status JZcked against the current drive selected ; on the board and if not the same, the track table is used to store the ; old track number and get the new drives track number, then the new drive ; is selected on the board. ; DSKSEL: MOV DL,PDRDRV[SI] ; get NEC 765 subroutine. ; initial command in CH reg, additional bytes are sent from the ; beginning of the READ/WRITE table as requested by the 765. ; If command in CH reg is a format command, the FORMAT table is used. ; reg CL contains the number of bytes __X1 ; if not present, continue exit ; CALL RETSSZ ; return current sector size ADD CURADR,AX ; set new DMA address INC CURSEC ; bump current sector number DEC CURSC ; check sector count JZ __X1 ; if done, continue exit JMP RWLOOP drive number AND DL,=3 ; mask valid bits MOV AL,DRIVE ; get current drive AND AL,=3 ; mask to drive number CMP AL,DL ; same as new? JZ __X ; if so, skip select MOV BL,AL ; old disk to reg XOR BH,BH ; prep for double add MOV AL, that should be transfered. ; CMDRDY: IN AL,FDD_STAT ; get main status register TEST AL,=1<<4 ; mask FDC busy bit-4 JNZ CMDRDY ; loop if busy PUSHF ; save flags CLI ; and disable interrupts MOV BX,&RWTBL ; point to RW table MOV AL, ; else, continue loop ; __X1: MOV AL,IOERR ; get error status AND AL,=0XC0 ; mask error bits JZ __X2 ; done if no errors OR AL,=0XFF ; set AL=FF __X2: RET ; done ; ; ; Setup DMA controller ; DMANIT: MOV AX,PDRBAS[SI] ; get PD requeTRACK ; get track from RW table MOV TRKTBL[BX],AL ; and place in track table MOV BL,DL ; get new disk to reg MOV AL,TRKTBL[BX] ; get entry from track table MOV TRACK,AL ; and place in RW table MOV DRIVE,BL ; set drive number in RW table CH ; get 765 command AND AL,=0X0F ; mask command bits CMP AL,=FMTCMD ; format command? JNZ __C1 ; if not, continue MOV BX,&FMTBL ; point to FORMAT table ; __C1: IN AL,FDD_STAT ; get main status register TEST AL,=1<<7 ; test RQM JZ __sted base PUSH AX ; save it MOV CL,=12 SHR AX,CL ; calc the extended page MOV DL,AL ; save it POP AX ; restore base MOV CL,=4 SHL AX,CL ; calc page offset ADD AX,CURADR ; add in DMA offset ADC DL,=0 ; add CY to page addr OUMOV FDRV,BL ; and drive number in FORMAT table __X: AND DRIVE,=~(1<<2) ; select head 0 in drive field AND FDRV,=~(1<<2) ; select head 0 in drive field RET ; done ; ; ; Recalibrate the current board selected drive. The 765 recalibrate ; comm C1 ; loop if not ready TEST AL,=1<<6 ; test DIO for direction JNZ __X ; if 765 full MOV AL,CH ; get byte for output OUT FDD_DATA,AL ; send it MOV CH,[BX] ; get next byte for output INC BX ; bump RW table pointer DEC CL ; count=cW '> t  > t /.  u(? u ?CuR)uuȊȰ Es u p t bZR$PuzQYAj:e^:[V$< uXP<u $< t 5ŀ s u$XI\UUðTTÃ|tDD"">"u """, "<t<u |uD< u ÃpuS5[T"ÃË%sá$##"$"$"ʱ3 ">$tuMT"p "Q?t$GOQpount-1 JNZ __C1 ; loop if more to send __X: POPF ; restore intrp status RET ; done ; ; ; Receive NEC 765 result phase subroutine. ; The results of an operation are read out of the 765 as ; requested to be read by the DIO bit-6. The resultu`Z. u!d  tC?YtC5 >( tg'HuL. uJ>( tCetr S#[uCJ<tS[uuE. :u: PtU'765 <=t<_u5F65 u+X:  t:ň/u/'u€YY Ў"$0"&E "8t 0D&ED|tD&&e&>"u &e& ƒv"$$"$"$#<t >#wh##$%$ڊOW[3ۊ؁%$s are loaded ; into the RW status table. ; CMDRES: PUSHF ; save machine status CLI ; disable interrupts MOV BX,&RWSTBL ; set result table pointer ; __C1: IN AL,FDD_STAT ; get main status register TEST AL,=1<<7 ; test RQM JZ __C1 ; lt')8o G( uW{ '>( u: tȢ9 1 t̠9 >0 t30'u=@t+؎%: S'[7G\'! t t$%#$.#>#GEE)#u >*#tsunD9GrGSyuX:*#sMHuD+9GrG-Su2u-kAu :*#suCn*#G2$ËG"""uσtlutc<uutGEoop if not ready TEST AL,=1<<6 ; test DIO JZ __X ; if done receiving IN AL,FDD_DATA ; get result byte MOV [BX],AL ; store data in table INC BX ; bump table pointer JMPS __C1 ; and loop for more __X: POPF ; restore intrp status R < tN tſ&E.&E.*. ?t.0 (, : uhCMD$$$ SUB8u GDGD3)#### 2*#Ê)##9t!sUG;u E+GE@ܰËG;EtsE+GEEEEEE)##À>)#t#uñ$'#>)#st QD+Gu  D@*! COPYRIGHT (C) 1980, DIGITAL RESEARCH   =_.:;<>,DIRSUSERREN TYPEERA DIR NO FILEALL (Y/N)?FILE EXISTSMEMORYQVW*#Ȣ*#*t2ɋ_^YRW3ҵ:*#sD;rЊt _ZRW:*#sD+Gtr;sЊ߰t _ZËGSFF[UQ;r F;FrY] à*#*#+#URQ;uF;FuYQ͎ñ3б QYð Q[ uCS[';20 빱:뵱 뱊бñG'tù رԺ's ñ' V$$tȎм$$$&_tUWV%#^_]%#$&$$$ω$#3$'#] û" u%l rPX< t< t < t<t< à" uKD$t8<u:1<t2">#u $$t>#u H&"à" uQYQYQ>$tY"<t< s t<u< uÊNs P^Y@ u "$u 67 t@|:t9 <w<w[9: FF<.uFC365 [ C??u ÿD (tKuÊ< uÌK5 .> u. 0 >,. 0 Q$ТX$9 .> u0 AsA+>&_9 .##!S)r 6ٷ. #<uU###jS$A##4oYPQ'#(#26$6$#>$$YXQ!Q$YPQ(#2$#>$>$YXñ"##ȎS"[PS\+\E+E;v[X++" "<tf#":"s u n i<$tAQY""$&CSQS[Y< u< t<u t͠""Q<u t&K|<u QS"<u$<u["":sG<uK[~<u5Q?Y[SQ tC&QS[YS" t*"" "uC&QS> ;t׋65 tu+: tE>( t5H ؋⹐ \ 7 < t tS[C?. t: u̻( ? u!Ê< t'C,0< suűrrruÀ? uCuûK؊': t$Ȼ9 :t: t Ȼ9 :uà9 <u"|t>D"|DtD"Q8RZY>$t1Q6Y"9DsD8\|t Ts [T t)"7T>$t5H;"wױ7="+,>###;uE# "8t ðÀ>"u "ډ"ð|t.|t\;\v+\ [Y&<u <u؎@:s,[&/ ؎bDb?t uLD0? u 0!c_Ë$Î$$ð% %% %"˻"'QYÊ$tP"""ډ #"$"""## t*$t#tًȵ#Ë# Ê"###"" ؉#Ë$ ú$#ڊ#""##<u[urg" "#$\\$#Gt g#`#$$Ȣ#<s$##$$$À>#`u$"u"3ۉ""$$N{>$t ##<#u#>#t#K$#`$IaÀ>g ug 벻k=ERuG=MAuG=P t juU݋Q!D*EUTBPWk;tRЬCI;uZ;t tsMtC;rߋ_XYJ+͉ ++ڋûHtrZ\ G]û I<u2 t&Z2#ڠ#ù"2CQ$Y á"$$Ë""#B" ڊs "t"*"#Ë$ Ë$";rBR+ӋZñ##sQO#"Yt :t s_È3$ $t[>#`u$G $u#~Z$$$??t??t=$$$$)"&$$J"" nl"$à#jt-jkBû&*ɨuB<s%ӹ:tC-+ڊU$jtQt ]ʈ$]dj.b%.f%.j%.p%.|%.x%.%.%.%.%. " "$$~û$C:uû$Ë#$C$ds䠦$$QY# u&QYLр"ڊR$Y QȈYQZuR>#tQSQCS t ";r[CYϋ"Cˋ"C#""25X"#À>#t$$>#`uO# t ##>'#uSꡛ$#cuL 6$$ t* : %.%ux*ʋӀt':rċ%ȎػMk(>`au>Yaua:au >]u\<tC\>YatZaZaYa^<t>]t ]]j>Yaut]]au]]u , >]u >dtP*dSt;h?t$:u C,$uȢ$oxѠ#EQ."""*$YË$!##$#u!#a>taaY**P=r==8,Z]at`ZaYa<tYaC>YatX#X]tz^tlofu#t u u:uGڋ;u3BCBCu¹هً:rهي #$6$$"U$t$ڱ2Cu ڈy2 # tP|t PD"X" C"V"S%#&Q&&&&&&&##,,,,,,,,,0Z\\]z^ad\at2\at+`ata\a t.%.x9.&%.%u.x9>a>ta:at">_ateaaؠ\aCXaa``]_π>`u%>nfu``d6d F*))__t$ $t""" #t &$t&!u #tut 2"#4# #w#:#r$u t y]# #$(###t%%`;;0@ARSR1.107ȎЎ؎u؎*L-f.pE?  """0/F)*X $y  B@N@O@a:au=Lt7>`u">`u~``0`u*]```u`````aa2bat_>`u V```>`t`(}```>`t:`t``_>_u>_t π>_t9_`Nu``2`t_```>`t؈؉C>$tÈ #>#uE> #u>6#>"3@### #Ê6""C:u###:rP$X<u>#u_Y$ uȢ#H#Q$!ڊ$PC$Ȋ$XC ۳ui ڈ ڊ*u ڊ@@@@E@GBP@ MAddPnnln"*h*$g.䓊䓆=uD械械橰䖨@t  g gb-昻gX-t'`?@uGt'gUjt%j>'gtc<u\<u=1<u62`jj:hr]> }L$,_2_tZ___`_ t.%.x9M.&% .%u.x98_t*)_t]:]t ] 0M`_ðCCÀ>`t>nft>bat>aatba_ >aatba.6; P>_t6_ P>aat I _BdqÀ>dtdP6ddVXÀ>dr%dd>dt>dPrdd>drd>dtd>dt ddOddd{PX`>dtd>dPrdd dd:aw.%u:at a.x9.z9 B@@.&rfuyffX.;>}ftonff0._B.aBf{f}ffv>ftP{ff}ffZff>ft Pfuf~JB@@nffuf>ftPfG6dd.YB.>[BRPQ=IB@@JB@@Y^.fB< uu@`.0  B@@C>_t%_` .0  B@@CX .; À>`tPU`XPX V^V^PX$V^V^Nx /CC u۱ň']ػ```OP0< r, 1 0Z`X%h`T`` 00]`` 00c`%.x9=r PPJPXY.>9u t  B@@`PQd=t= }ddg- PPdXPddP+ddT>dtd1>duofPIdd>du =udYXdPddPdPSdd=P@u@@tQYsGÈfff>f~>>f6>f|/>f'+f;f|f >ft 6f>ff6f>ffÈfڋ`tR>fu Sfy[ffSUf][f` 00f`Q$Y.`X.`.&`.``Ȏ.`PSQRUVW.`.`&G%tȎ؎`&`X`_^]ZY[ X.`.&`.&`.`X.`.&`.`aȎ.`PSQRUVW.`.`&G%tȎ؎`&`X`_^]ZY[ X.`.&`.&`PQ1 c8Yu>dt[u=PtP"P;tG>dPudd0d%=pd -pd.dP+ddd[XSP㋇Ee[ád3d;d|>dt +dddS㋇e[Sظ`rd[PP`@tIBX@@`XV`@tpBdfC&&`6SFfffUf}][RSf[`ËSPX u[ ufQP$ &fXYQPff0 0ࣥfXYVRXS>ftD/ Ĝ V^$$CCNxuٱXda>dat`ca`da:caubt(>b(~bbb>btbFEb.%t.x9.%t.%uG.x9 >bt<t6>bubӀ>] t]++Ҋ] *A[׀<t 8t\PQ1c< 59YX@@`^^PQ `@tF`YX`P@u tXKB@@@gahaHSP. <.&<.<..<.!<.6#< IB@@JB@@LB@@@ B@@XÃt'RP X AQpY rGZ`@tB@sB@sBPkBX[*V`[Z^ðHKPX V^V^PX$V^V^Nx /CC uرň'RZ RZ$RZPYXP+YXÉfffffff<u <uË6fff\&f1Ifat`ea`fa:eaubu$b bGdGO db< s *b:rÀ>bubGbR8.%.%.x9.&%.x9À>bu bG.9bbbbb haCÀ>bt#=0r =:r<;tW`=Pr+;dsPd+X+dd+PԊ+ËbP.%$e뾊jÊ؀>\t1vAv'}"\:etee^atVWSQbFhagab;>bt)G=;t ;>btAGga>ga FY[_^PVRvtЉFZ^XPVW|a}a>gaugaha>gat#<%u}ab|aga֠|a$<u|a>}at&|a|a.9_^XVQha>gaˊee\*؊\%tw rr QP+eeX*T&Y<t<teee`ee>eteeSe0e8ee؎r <9wFCIYÀ8fQf#t&fۍjʃvf.uftful&fYQZYDf``:t uBfga} uY^VQha>ga} uY^VQha>ga} uY^Vha>gat>gau)<t,<rdD<t,ga~b>dtb;d}bPdbdbX }ItGtp>b&e+*ee6er6eFe>eteeIe1e2eeeCFSڊBF[띹e؊SQKY[6e.%$bu+dbI|bd+IlS>bt+dȡdV>+dȡdHdbI=%>buddbI!dbIX9^Vha>ga=<}86ddt*P*<t d+<t O*dOX^^aÀ>^atOÀ>^atfȎмef.fRPQSUVW.f.f&G%tȎ؎f&fXf_^][YXZ.f.#f.f.&f.&fu(hf&ifkf&lffff>#f*6ef0 0aaùQ Y[pf rf؎frf@ff fcf8fU3@36g3ۊ㋇faa3**#f@tgg33f1#f15#fg7ágfg#f.%.%.%tC.&%jjv%*يtjh*uىuuGhdPssR t~@tjuPj@ÈjipXulVQha>gau* tttt[ bnzY^^aVQha>gau* tttt %6Y^^aaaaa_a_a.;@.;@`a`aÀ>bubGbñ>`u%>nfu``d6pff&w&WÀ>sft *sfQY6ddDofÀ>sft *sfÀ>sfvsf>tfOvtfO6sftfRZf>ufu4+9ufvuffufff=v-f+ff>yft[.;Pnff._B.aBfwfyff>ft Pwff> t;?t3uko>ju uujujٱufkmjhԊj@Èxi`iju uu*䠺u$u*jQj>j[tri t%*D@h>ut7ut9Agu@g>gAg9Agt Cgg(Cgtxg tn$`<@t Āt#u>Cgt뒀>$gu.>%t6$h>ht*h>ht%go t$`<@uĀth g uut#uhhB<t=!ut3u>ut,t#%jj*ju jhÀ>ut4ugg>ggggGgGg%"gtg t $`<@u* ù,64gsg2gAAN`gQYF Dg*iàh 0fhPhàh h!gP&ghȢgAgPģ"g gX$ggg&=g&Cg*H'g$goû g t$`<@uĀt*OWOXOYOZSUBMIT AUTSTRT \  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>ut->uu&!uuuhuhfkjhÃtڊCÉjÉjûm>uuAjhj1P6j>jjX>utuukjQ>uuGj6j>j؎jhj<u>utuukj#uuu*CI* u"䖨t*)g닟h u*g+=> gtQQ@䢨 uYY9YYSICC> gt梊[> gtQ䢨tY Y)g*䒀> gt 䢨uQ䖨uYY䒨t4gg84g5h+> gt 䢨u  j*k+m-n.o/p0q1r2s3t4u5v6w7x8y9 ?  @DH `$d(h11!uu@u@>utuu4uuuuuuuuuuuut=Ȉuu:u/u;uu&uu:u&u:ruuuu>utuu>ur4usuut]j:hu>j:hu5h:ju,u:uu#>utu䖨t4g'h2g*g> gt 䢨 t䠪> gt 䢨u*Ê曋G棊棋G擊擰@؎2 [!22@̢@33##44$$55%%66͛77&ԥ&88*գ*99( ֭(00) ܮ)_-_ _-=+ +@`~ ~QqQQWwWWEeEERrRRTtTTYyYYUuUUIiIIOoOOPpPP[[{{]]}}\\||^^^AaAASsSSDdDDFfFFGgGGHhHuu<ttutu<tjhjhjhuuut7u>ut uɺZrhjhj'u<ujuu%j>jj@uu$QuɀtmYu؎j>uuu uu$áu+һ=r-HJjJJKkKKLlLL:;::;'""ZzZZXxXXCcCCVvVVBbBBNnNNMmMM,,<<..>>//??CP/M-86 1.1 (1.107:015;D) CAP ALT GR1 GR2 sp:9 / / : SunMonTueWedThuFriSatd jˆu+һjjjujutHj;6gu$j:huj;huj:hu u:htWuthu<tlj6gjhjhjhuhuthu<t5uu%?>jj@uۄu .u>uuuu huXõu>ut uɺZrhm&mtSjhj6jjlMjuuAlkQ.ms@ƀǀYmjjhÈGر jرjjhhhhGhhS<tjjjj:  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ @` @``38 8 8 8 993 99[f4(3=3$49894Av5B5C5D5J+6K7Oa7Pa7m 5M 5>b7lh7Lh7fs h":&XiYi%u&Ziu>ju.>%unh>hrwh>hs hG$hh<u&hW>jt>jth>hsK/Yju"hh jhG$ GjhG$ GÊXiiYii7hs7Hs794140 4B430R81V82Z83b Zi#ihZ÷ñ늟h؀hGPuFPsrRÿXiP@sRssáh h;g*6g9;gr ;g8g:ghhh &g:gtY8g:g@g*gg(CgAg9Agt>Cgv/g.CgAgOOOPOQOROSOT 0PPpP0`@ P@0 p`P@00` P  @p0` P @!p;nUn,nnn;nUn,n#oo;nUn,nRo3o;nUn,nobo?     "#$&0'`()*+ -P./013@4p56790:`;0000=C=CEE?)@@9@ B B LGPH(@ `@n@|@@@B @IAJBKCLDE1B1P1bP@ gHHHHHHHH _ P0 HDC H/W ERROR CMD = H STR = H oopapooqpooq]qoorq4@ EST = H PHN = H LCNH = H LCNL = H LHN = H LSN = H SCNT = HIST = H UST1 = H UST2 = H *** Hard Disk Unit : is Not Available *** UoUkU`UUUUQUQUQUUQUQUUQUQU0  I8ERR0123456789ABCDEF FDC H/W ERROR STATUS 0 = 00H STATUS 1 = 00H STATUS 2 = 00H Type R(Retry) , I(Ignore) , Any Key(Cancel) *** Floppy Disk Drive 0: is No   Unr$.%蒙Y莙.&%gt Ready *** Type R(Retry) , Any Key(Cancel) *** The List Device is Not Ready *** Type R(Retry) , Any Key(Cancel) *** Floppy Disk Drive 0: is Write Protected *** *** Hard disk unit [ , , , ] cylinder read error *** Hard disk unit is not defrUnr7sUnr~sUnrs@?1 @?1 @?1 @?1 u*QS *2S0CCڈC7CC7CZ[WYyú slUZڱ3SXy PʻETˊt S[t0ӈ/G tS!ÊCDnE[2sc R [t!CCtAt t.EWhined at the configuration Please reboot from floppydisk . NEC Advanced Personal Computer CP/M-86 Version 1.1 Copyright (C) , Digital Research , Inc. Interrupt Trap Halt /tM{uHy8R!uZu!uCuC]RFZEtC^0ܺ@K1-7t ETˈ/ñ ñ ӉP!ӉP%C5P ӉP!ӉPÈ! Ê5PùQCS [Yò)DT$DThtDOËTUP˃utt$S@[tDOÈ3u PP#]UtP,Њ"s3>3u PP"-"."/"0"1"2P93PPPH]U#s%@P>3Nu@Y"sP"P3р>3YtPP]&&P+PPPPP" -" ." /" 0 " 1" 2 PsP]U-:P:X%/ZڄuRSW\UD]&CuDiڈCڹ D]R3Z ӊDQ$C0DQtЈDR$Z,i/DOÊ PÄt u_ûPûUTɻTÊ Pda,2u$u tOtQtStUtWtYt[t]t_iu]6:Pd' &'sP3t PP͠rP;sjP;t@@r]á]á;r]Us1-3ta>3t PP:t >uPUТ& "s PP$6]Áj]U~ r>t:wgs PFPsR!&"$s#Ps*%s]á&"$sE5 ss 6+%"s]à!s ]U3PhPP*3u$]À>3u>3u%u뷰PPCU]UF]Ð{.츀P5PPw>5t@("s P|&=0r -PP(s "PI5r. v?PFPp-;rF6:ӈ ]U~ u>uva28r(*>t  P/~ u]U~t@"s F0P]UFPF$P]U8t@]U Pdh\P >3u@ P; r@Y"s  ؀>3u>u P\Ps]á @ 3$@PPPPPPrts=2 s&s>uPW#]U* #)!"%(s *P>5w`P s PPO>+=t >+_tMPX> u?>t52 sP\P$P]@(5-P >u%> uPP#P!'''P66>u :P  P ]U젾s~ tg)sD~ t>>t"<u<:r  P>tP)~ uv~ u)]U~ar ~zwf_F]U~Ar ~ZwN F]U< w(Ê t< u.P6u]U?P>3t33$@PPPs ]ư]U:u :u6]U젶:5r ]à6]U+< t]U>+ t]YQUG% + ,>v PP0므>t!%s>+,t>+ t PP>+,t@%>u>u>u>r> w s PP>t">u">"'w P"u> uPz %sP7UPP]UP. PP*u;r"s>t 67PP* PP$ sCs **> t@ss2<u]ðPPis&s 6]às 6>,#s>, u+G$>wƇup,6+js#>,r]À>+*uPw+Ѐ>+:t>,u<G,A<v]6+s>+[uqG% ]>,t]> wi<P]UPF$Px]U P P]U PvW]Uv]U4 P4P1]U PP"]U PP]UPv]UPv3]UPv3]U>3u]Ê3ˀ`:u]ðPP3]UPv3]]à]U>tȢ<u/ ])>tƊ6]<u]Â>t%6Is맂>t6s ]]]UFFƊ6u 6:u]U+s;v@֋P:t@Y"rȀ>uG%^<[u]Àu]À>+[uc^>,u],>+.u- +PDs>, r]À>+*u P{QӀ>+[uG%G ]]U> wF:uu]U,UPP3]UPvo]UPv_3]UPvL3]UPv93]UPv&3]UPP]UPv3]U PP]U PFP]U6]U6]U6]U!Pv]U"Pv]Uw@"$]À>+t@]U>:t#>us]ðPP6>u"s&>:u@P>u@Y"sWXM:P66}k>t ZRt PP,Ɗ+?u ]U+?,:Fs]Uc++< t@+P]t@Z rAv>+ tİPP뾀>+St>+Qu1+<t@P>+ t@Y r+9+,0< v#+,0< w ݠ#Pv]U$Pvx]UFȈFt PP>t PP]UtP4 P>3u PPpP>3t}PsUsL>3Yu u<v PP'G$v+]r completion ; #ELSE ; MOV DX,&FDCPOL ; get poll routine addr CALL LNKPOL# ; add to poll list MOV BX,&DWTSPH ; get disk wait semaphore JMP WAIT# ; wait for completion ; #ENDIF ; INTRPS ; ; ; Get translate table address. Z flag sey bit is ; not set, then a sense interrupt status command is sent and the ; results of a seek, recal, or drive ready change interrupt are read out. ; FLINT: IN AL,FDD_STAT ; get main status register TEST AL,=1<<4 ; busy? (read or write in process) t if no table. ; RETXLT: MOV BX,PDRDST[SI] ; get disk specifications offset MOV BX,XLTBL#[BX] ; get translation table offset TEST BX,BX ; translation required? RET ; exit with status ; ; ; Return current drive type code address as [BX].  JNZ __RWD ; yes, read results out MOV CX,=(SISCMD<<8)|2 ; get command and length CALL CMDRDY ; issue sense interrupt status command __RWD: CALL CMDRES ; read the results MOV AL,RWSTBL ; get ST-0 AND AL,=0XC0 ; mask error bits CMP AL,=0; RETTCA: MOV BX,PDRDST[SI] ; get disk specifications offset ADD BX,=TYPCOD# ; index to type code address RET ; all done ; ; ; Return the current sector size in bytes. ; RETSSZ: PUSH CX ; save reg MOV CL,SECSIZ[SI] ; get PD request sizeXC0 ; drive ready change? STC ; preset CY flag JZ __X ; if so, continue exit MOV AL,=DMADIS ; get DMA disable command OUT DMA_WSM,AL ; disable DMA device XOR AL,AL ; clear CY flag __X: RET ; exit ; END EOZau!<Na (1/8/82) CP/M-86 PIP VERS 1.1 DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USER NUMBER$INVALID FORMAT$HEX RECORD CHE code MOV AX,=128 ; get base sector size SHL AX,CL ; calc physical byte count POP CX ; restore reg RET ; and exit ; ; #IF INTRPS ; if interrupts ; ; TurboDOS floppy disk interrupt service routine ; FDCISR: PUSH AX PUSH BX PUSCKSUM$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$INVALID HEX DIGIT$CLOSE FILE$UNEXPECTED END OF HEX FILE$INVALID SEPARATOR$NO DIRECTORY SPACE$INVALID FORMAT WITH SPARCE FILE$ =.:;,<> _[]OUTPRNLSTAXOCONAXIINPNULEOFERROR: $ -H CX PUSH DX ; save regs PUSH DS ; save user data seg CALL GETSDS# ; get system data seg CALL FLINT ; process 765 interrupt request JC __NSIG ; if ready change int, no signal MOV BX,&DWTSPH ; get disk wait semaphore CALL SIGNAL# _ $$$$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$COPYING -$REQUIRES CP/M-86$CP/M-86 PIP VERSION 1.1$x\ǀuڹA)syIAx )sڋ\ˋL D"D L \TڋLˇڋ\)s,Sˉ\Q ZuH\ L_NSIG: MOV AL,=FDDIREQ ; get interrupt request level CALL SIGEOI# ; do specific EOI command POP DS POP DX POP CX POP BX POP AX ; restore regs JMP ISRXIT# ; continue with interrupt ; #ELSE ; ; TurboDOS polling routine for FDD intӉ\7\C뻊D\T0)s؎otDtt<Dx\ÊD$¶RӋu%S*uDtuPP> ~>tlc t=tWP- t8>u= |.>狅>狅>t$P- u<> |,EFP;"~t</ETRDY ; function=3, return ready WORD FMTTRK ; function=4, format track NMBFCN == (.-FCNTBL)/2 ; number of supported functions ; #IF DPRINT ; DIGIT: WORD 0 PDRHEAD:BYTE "Contents of PDR at ",0 CRLF: BYTE 13,10,0 SP2:  ; Logical tracks reserved PRSRV == 8 ; Physical tracks reserved P2TRK == (PTRKDSK-PRSRV)/2; Start track of 2nd partition ; ; Driver temporaries and variables ; DEBUG == "Debug (0 = no>> >tzPs6 } >狅P6 } >狅 P)7FPw7F~=tvLPv66q7PPN65NPP7P@t uBPPPV>狅>狅 >狅  BYTE " ",0 INMSG: BYTE "Into drvr",13,10,0 OUTMSG: BYTE "Out of drvr",13,10,0 INCOMN: BYTE "Into driver common",13,10,0 SKERR: BYTE "Seek error",13,10,0 XERR: BYTE "Xfer error",13,10,0 RESK: BYTE "Reseeking",13,10,0 MVD,AL ; Clear out DMA command reg MOV AL,=0X0E ; Clear out DMA mask reg OUT DMAMK,AL XOR AL,AL ; Clear out interrupt mask OUT DMAIMK,AL LEA BX, ; Initialize controller INC INITDONE ; Do not allow another init __C: CALL __E ; call the disk driver OR AL,AL ; Any driver errors ? JNZ __C2 CALL FLUSH W: BYTE "Finished moving words",13,10,0 #ENDIF LOC Code# ; locate in code segment #IF DPRINT PRINT: PUSH AX PUSH CX PUSH DX __1: MOV CL,[BX] OR CL,CL JZ RECALCMD ; Issue recalibrate command CALL SENDCMD ; RET ; end of initialization ; ; Convert Error map bit vector into list of bad tracks ; The NEC bad track map is stored as a bit vector preceded by ; "ERMAP ??" followed ; No, dump buffer if necessary __C2: PUSH AX ; save results MOV BX,&DMXSPH ; get mutual exclusion semaphore CALL SIGNAL# ; signal process as ready POP AX ; restore results POP SI POP DI RET ; done ; _ __2 PUSH BX CALL SCREEN# POP BX INC BX JMP __1 __2: POP DX POP CX POP AX RET PRHEX: PUSH AX PUSH BX PUSH CX  by a bit vector of bad tracks. There is ; one byte for each cylinder (8 tracks/cylinder). Note that ; the lower cylinder number is assigned the higher bit! ; ; Assume ES: segment containing HDC buffer. SI is pointer to ; source within HDC buff_E: MOV BL,PDRFCN[SI] ; get PD request function number INC BL ; Allow FF function too CMP BL,=NMBFCN ; check max function number JB __J ; if valid, continue XOR AL,AL ; set error status RET ; and exit ;  MOV CX,=4 __1: ROL AX,=1 ROL AX,=1 ROL AX,=1 ROL AX,=1 PUSH AX AND AX,=0X0F ADD AX,=0X30 CMP AX,=0X39 JLE __2 ADD AX,=0X07 __2er. DI is pointer to destination ; table in unused portion of HDC buffer ; BTOL: CLD XOR BX,BX ; Initialize track number MOV CX,=PTRKDSK ; Get count of tracks PUSH DI __J: XOR BH,BH ; make double word ADD BX,BX ; times 2 for table lookup JMPI FCNTBL[BX] ; off to the driver function ; ; ; Function=2, Return disk specifications. ; RETDST: LEA AX,DSTTBL ; Get address of descriptor : MOV DIGIT,AX LEA BX,DIGIT CALL PRINT POP AX LOOP __1 POP CX POP BX POP AX RET PRPDR: PUSH BX PUSH CX PUSH AX  ; Save base of track list ADD SI,=0007 ; Position to before bit vector __1: TEST CL,=07 ; Move to new cylinder ? JNZ __2 ES LODS BYTE ; Yes, ge MOV PDRDST[SI],AX JMP RETRDY ; Return ready status ; ; Branch here if device read errors or format cannot be found ; FMTERR: XOR AL,AL ; force error status RET ; and exit ; ; ; Function=4, format aLEA BX,PDRHEAD CALL PRINT MOV AX,SI CALL PRHEX LEA BX,CRLF CALL PRINT MOV CX,=7 XOR BX,BX __1: MOV AX,[SI+BX] ADD BX,=02 CALL PRHEXt new byte __2: SHL AL,=1 ; Get bit for track BX JNB __3 ; Is this track bad ? INC DI ; Yes, move to next table entry INC DI ES MOV  track ; FMTTRK: OR AL,=0XFF ; force result error RET ; and exit unsupported routine ; ; ; Function=0, read disk ; READ: MOV WRFLAG,=00 ; Clear write flag JMPS RWCOM ; and join common code ; ; ; Function=1, w PUSH BX LEA BX,SP2 CALL PRINT POP BX LOOP __1 LEA BX,CRLF CALL PRINT POP AX POP CX POP BX RET #ENDIF ; ; Dr [DI],BX ; Save bad track in track list __3: INC BX ; Move to next track number LOOP __1 ; Continue until all tracks SUB DI,AX ; Calculate numberrite disk ; WRITE: MOV WRFLAG,=01 ; Set write flag ; ; Common routines to both reading and writing. ; RWCOM: #IF DPRINT LEA BX,INMSG CALL PRINT CALL PRPDR #ENDIF iver initialization. ; This routine is called before the first actual operation, but not ; at cold boot time. This is because it calls routines that will ; eventually call WAIT#, which is not allowed at initialization time. ; INIT: XOR A of entries XCHG DI,AX SHR AX,=1 ES MOV [DI],AX ; Save entry count RET ; ; ; Driver entry point. ; #IF DEBUG DSKDRX:: #ELSE DSKDR_:: #ENDIF  MOV CL,=06 ; Multiply track by 64 for MOV AX,PDRTRK[SI] ; ...virtual sector # SHL AX,CL ADD AX,PDRSEC[SI] __3: CMP AX,=LRSRV*LSECTTRK ; Is this sector in dataspaL,AL ; Reset hard disk OUT RESET,AL OUT FMTREG,AL MOV AL,=0X80 ; Perform black magic OUT FMTREG,AL XOR AL,AL OUT FMTREG,AL OUT DMACM PUSH DI PUSH SI MOV BX,&DMXSPH ; get mutual exclusion semaphore CALL WAIT# ; dispatch if necessary TEST INITDONE,=01 ; Has controller been inited? JNZ __C CALL INIT  ce? JB __0 SUB AX,=LRSRV*LSECTTRK-(PRSRV*PSECTTRK*(PBYTESEC/LBYTESEC)) ; Yes, bias to actual space __0: MOV CX,=PSECTTRK*(PBYTESEC/LBYTESEC); Get track/sector XOR DX,D to first sector NEG AX ; Get number of bytes left MOV PDRTC[SI],AX ; Save new number of bytes MOV CL,=07 ; Calculate number of sectors SHR AX,CL ER ; Perform actual transfer JS XFERERR ; Was there a bad error ? __MDAT: CALL MOVEDATA ; No, xfer between mem and buf XOR AL,AL ; Return good result X DIV CX ; AX := Track, DX := Sector SUB CX,DX ; CX := Sectors left in track LEA BX,LOCPDR ; Get address of local PDR MOV PDRTRK[BX],AX ; SavMOV PDRSC[SI],AX ; Save new number of sectors PUSH BX ; Save original PDR again CALL COMN __99: POP BX ; Restore original PDR __98: MOV SI,BX #IF  RET SEEKERR: #IF DPRINT LEA BX,SKERR CALL PRINT #ENDIF XFERERR: #IF DPRINT LEA BX,XERR CALL PRINT #ENDIF MOV AL,0XFF ; Ree actual track number MOV PDRSEC[BX],DX ; Save actual sector number MOV AX,PDRSC[SI] ; Get sector transfer count CMP CX,AX ; Does I/O go off track ? JG __1  DPRINT LEA BX,OUTMSG CALL PRINT #ENDIF RET COMN: #IF DPRINT LEA BX,INCOMN CALL PRINT CALL PRPDR #ENDIF MOV DL,PDRDRV[SI] turn bad result MOV CURDRIVE,AL ; Also kill buffer status MOV CURHEAD,AL RET NEWCYL: PUSH AX ; Save important register PUSH BX PUSH DX __SK: MOV SEEK MOV AX,CX ; Yes, use actual count __1: MOV PDRSC[BX],AX ; Save new sector count MOV CL,=07 ; Calculate byte count as SHL AX,CL ; ... sector count * 128 ; Get new drive number MOV AX,PDRTRK[SI] ; Get new track number MOV DH,AL ; New head is bits 0:2 AND DH,=07 MOV BX,AX ; New cylinder is bits 3:15 SHCYL,BX ; Setup new cylinder AND SEEKCDRV,=0XF8 ; Remove old drive number OR SEEKCDRV,DL ; Insert new drive number AND RCDRV,=0XF8 ; Remove recal drive number OR  MOV PDRTC[BX],AX ; Save new byte count MOV AL,PDRDRV[SI] ; Move drive number across SHR AL,=1 ; Convert to physical drive MOV PDRDRV[BX],AL JNC __2 R BX,=1 SHR BX,=1 SHR BX,=1 XCHG BH,BL ; NEC wants hi byte, low byte CMP DL,CURDRIVE ; Are we at this cylinder ? JNE __NCYL CMP BX,CURCYLDR  RCDRV,DL ; Insert new drive number MOV RETRIES,=MAXRTRY ; Setup retry counter __C: LEA BX,SEEKCMD ; Issue seek command CALL SENDCMD JE __X ; Was seek ; Is logical drive on ... ADD WORD PDRTRK[BX],=P2TRK ; ... second half? bias if so __2: MOV AX,PDRDMA[SI] ; Move DMA start address across MOV PDRDMA[BX],AX MOV AX,PDRBAS[SI]  JNE __NCYL CMP DH,CURHEAD JE __MDAT __NCYL: CALL NEWCYL ; No, seek to new cylinder JS SEEKERR ; Was seek successful ? MOV CURHEAD,DH ; Updat successful ? DEC RETRIES ; No, try again ? JS __X LEA BX,RECALCMD ; Yes, recalibrate disk CALL SENDCMD JMP __C __X: POP DX POP BX PO ; Move DMA segment across MOV PDRBAS[BX],AX PUSH SI ; Save address of real PDR MOV SI,BX ; Pass in fako PDR CALL COMN ; Perform actual I/O e track buffer status MOV CURDRIVE,DL MOV CURCYLDR,BX MOV XPHEAD,DH ; Setup parameters for xfer cmd MOV XLHEAD,DH OR BL,=0XFE ; Set unused bits in cylinder P AX RET FLUSH: TEST DIRTYBUF,=01 ; Does buffer contain new data? JZ __X MOV DIRTYBUF,=00 ; Yes, reset dirty flag AND XCDRV,=03 ; Remove previous (read) OR AL,AL ; Was I/O operation good ? JNZ __99 POP BX ; Yes, see about more I/O MOV AX,PDRTC[SI] ; Get old transfer count MOV CX,AX SUB  MOV XCYL,BX MOV XCDRV,DL ; Set drive, but mash command TEST WRFLAG,=01 ; Is it a write command ? JZ __READ CMP WORD PDRSEC[SI],=0000 ; Yes, should we read track ?  cmd OR XCDRV,=WRTCMD ; Insert write command MOV DMADIR,=DMAWRT ; Setup DMA write CALL XFER ; Do the actual I/O JNS __X ; Was I/O successful ?  AX,PDRTC[BX] ; Is there anything left ? JZ __98 ADD PDRDMA[SI],CX ; Yes, move buffer pointer up INC WORD PDRTRK[SI] ; Move to next track MOV WORD PDRSEC[SI],=0000 ; Move JNZ __READ CMP WORD PDRTC[SI],=PSECTTRK*PBYTESEC JZ __MDAT __READ: OR XCDRV,=READCMD ; Prepare for a read operation MOV DMADIR,=DMAREAD ; Set DMA direction to read CALL XF  JMP XFERERR ; No, return bad result __X: XOR AL,AL ; Yes, return good result RET XFER: MOV RETRIES,=MAXRTRY ; Initialize retry count __RTRY: CALL SETDMA LEA LL PRINT #ENDIF RET SETDMA: MOV AL,DMADIR ; Get direction of DMA OUT DMAMODE,AL ; Setup read/write mode CALL DELAY ; Couldn't hurt XOR  OUT FMTREG,AL CALL DELAY MOV AL,[BX] ; Get last parameter OUT HDCDATA,AL CALL DELAY __CMD: MOV AL,=0X11 ; Send HSRQ and CLCE to fmtr OUT FMTREG,A BX,XFERCMD ; Start up read operation CALL SENDCMD JE __X ; Was the I/O successful ? DEC RETRIES ; No, are there retries left ? JS __X LEA  AL,AL ; Transfer at start of buffer OUT DMAADDR,AL ; Setup low part of address CALL DELAY OUT DMAADDR,AL ; Setup high part of address CALL DELAY MOV L CALL DELAY __CE: IN AL,FMTREG ; Wait until formatter ready TEST AL,=0X04 JNZ __CE INC BX ; Load command byte MOV AL,[BX] OUT HDCCMD,AL  BX,RECALCMD ; Yes, recalibrate the disk CALL SENDCMD LEA BX,SEEKCMD ; Seek back to desired track CALL SENDCMD #IF DPRINT LEA BX,RESK CALL PRINT  AX,DMACNT ; Get DMA byte count - 1 OUT DMATC,AL CALL DELAY MOV AL,AH ; Get high part of track size OUT DMATC,AL CALL DELAY MOV AL,=01  ; Send command byte to cntrlr PUSH AX ; Save command byte for later __CWT: IN AL,INTREG TEST AL,=0X02 JZ __CWT ; LEA DX,HDCPOLL ; Set polling routi #ENDIF JMP __RTRY ; Go back and try reading again __X: RET MOVEDATA: PUSH DS ; Save source data segment PUSH DI ; Save destination register  ; Set DMA mask OUT DMAMASK,AL CALL DELAY RET DELAY: PUSH CX ; Save counter register PUSHF ; Save flags MOV CX,=0X10 ; Setupne ; CALL LNKPOL# ; Add to device polling list ; LEA BX,DWTSPH ; Wait until complete ; CALL WAIT# __XC: POP AX AND AL,=0X80 ; Yes, was it a seek com CLD ; Make sure transfer is forward MOV ES,HDBUFSEG ; Load destination for write MOV DI,PDRSEC[SI] MOV CL,=7 SHL DI,CL MOV CX,PDRTC[SI]  count __L: LOOP __L ; Wait for a while POPF ; Restore flags and counter POP CX RET SENDCMD: XOR AL,AL ; Reset completion status mand ? JZ IOSTAT MOV CX,=07 ; Yes, setup for normal status JMP READST IOSTAT: IN AL,HDCSTAT ; Clear status register CALL DELAY MOV AL,=0X10 ; Get byte count MOV BX,PDRDMA[SI] ; Load source for write TEST WRFLAG,=01 ; Set flags for type of call MOV DS,PDRBAS[SI] XCHG BX,SI JNZ MVWRDS ; Is this^Fdtot utxu%FȉFg^FF~}F؉FF- Pv P^F7V^WFVF~yFV؃FVF- PvvVs P^w7VF^GGG ; Set formatter CLCE OUT FMTREG,AL CALL DELAY __CEWT: IN AL,FMTREG ; Wait until CE goes down TEST AL,=0X04 JNZ __CEWT CALL DELAY __HDIN: IN AL,INTREG  a read call ? XCHG SI,DI ; Yes, swap source and dest MOV AX,DS MOV DX,ES MOV DS,DX MOV ES,AX MVWRDS: SHR CX,=1 ; Convert byte count to words FFFFFVvvvvvW v^F uFFFFF?t~|+F;F~N>^FFFF(^7v1FCC;tHgFF+ƉF }F~uFN tvv^W;vvv^FP^W ; Wait until HDIN goes down TEST AL,=0X02 JZ __HDIN CALL DELAY __SWAIT:IN AL,HDCSTAT ; Wait until status is posted TEST AL,=0X10 JZ __SWAIT MOV AL,=0X11  REP MOVS WORD ; Transfer from/to buffer JNC __R ; Odd number of bytes ? MOVS BYTE ; Yes, catch last byte __R: MOV SI,BX ; Recover critical  ; Get next parameter DEC CX ; Decrement parameter count JCXZ __PLST ; Is this the last parameter ? MOV AL,[BX] ; No, get the parameter CALL DELAY ; Set formatter HSRQ and CLCE CALL DELAY OUT FMTREG,AL CALL DELAY __CE: IN AL,FMTREG ; Wait until CE is down again TEST AL,=0X04 JNZ __CE CALL DELAY registers POP DI ; Pop destination register POP DS MOV AL,WRFLAG ; Set dirty bit if write OR DIRTYBUF,AL #IF DPRINT LEA BX,MVW CA OUT HDCDATA,AL ; Output it to controller CALL DELAY JMP __PMOR ; Process next parameter __PLST: MOV AL,=0X04 ; Tell controller this is last CALL DELAY   MOV AL,=0X10 ; Issue interrupt status command OUT HDCCMD,AL CALL DELAY __SW: IN AL,INTREG ; Wait until status is ready TEST AL,=0X02 JZ __SW MOV YTE "8" ; 78 BYTE "9" ; 79 ; #REPEAT 0X80-0X7A ; 7A to 7F - undefined codes BYTE 0XFF #ENDREP ; #REPEAT 0X96-0X80 ; 80 to 95 - function keys BYTE 0XFF #ENDREP ; BYTE 0X00 ; 96 - break stop BYTE 0X0D ; 97 - return BYTE 0X09  CX,=01 ; Setup status byte count READST: MOV BX,DS ; Setup pointer to status buf PUSH ES MOV ES,BX PUSH DI ; Save destination register LEA DI,ST ; 98 - tab/back tab BYTE 0XFF ; 99 - undefined code BYTE 0X1E ; 9A - home/clear BYTE 0XFF ; 9B - undefined code BYTE 0X08 ; 9C - back space ; #REPEAT 0XF7-0X9D ; 9D to F6 - undefined codes BYTE 0XFF #ENDREP ; BYTE 0X0B ; F7 -ATBUF CALL DELAY IN AL,HDCSTAT ; Get status byte CLD STOS BYTE ; Save status byte in buffer MOV AL,=0X20 ; Setup formatter for status read CA up arrow BYTE 0X0A ; F8 - down arrow BYTE 0X0C ; F9 - right arrow BYTE 0X08 ; FA - left arrow ; BYTE 0XFF ; FB - ins BYTE 0X7F ; FC - del BYTE 0X0D ; FD - enter BYTE 0XFF ; FE - undefined code BYTE 0XFF ; FF - print ; ; LL DELAY OUT FMTREG,AL CALL DELAY __FWT: IN AL,FMTREG ; Is formatter ready with stat? TEST AL,=0X20 JZ __FWT __SLP: IN AL,HDCDATA ; Get status byte STOS  #TITLE "NEC-APC Keyboard Interface Module" #PAGE 132,66 ; ; KBDAPC.A ; ; NOTE: This version handles APC keyboard input and calls ; the screen driver at entry point "SCREEN#" for output. ; ; Version: 07/12/84 ; MODULE "KBDAPC" ; moduleSpecial table for screwed-up keys. Scan codes are converted. ; SPECTBL: BYTE 0X2D,0X3D BYTE 0X40,0X60 BYTE 0X3A,0X3B BYTE 0X3B,0X27 SPECTLN == (.-SPECTBL)/2 ; length of table ; ; Shift case table ; CASETBL: BYTE "1!" BYTE "2@" BYTE " BYTE LOOP __SLP MOV AL,=0X10 ; Set CLCE in formatter CALL DELAY OUT FMTREG,AL CALL DELAY __CE: IN AL,FMTREG ; Wait until CE goes down TEST AL, ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; common NEC-APC equivalences ; KBDIREQ == 4 ; keyboard IREQ level DLYCNT == 40 ; delay in ticks before key repeat RATECNT == 3 ; rate count in ticks for key repeat3#" BYTE "4$" BYTE "5%" BYTE "6",0XD0 BYTE "7&" BYTE "8*" BYTE "9(" BYTE "0)" BYTE "-_" BYTE "=+" BYTE "`~" BYTE "[{" BYTE "]}" BYTE "\\|" BYTE ",<" BYTE ".>" BYTE "/?" BYTE ";:" BYTE 0X27,0X22 BYTE 0X18,"^" CASETLN ==0X04 JNZ __CE MOV AX,STATBUF ; Get controller status AND AL,=0X60 ; Mask irrelevant bits CMP AL,=0X40 ; Was operation successful ? POP DI  ; ; LOC Data# ; locate in data segment ; CIBSIZ::WORD 64 ; console input buffer size CIBADR: WORD 0 ; console input buffer address CIIPTR: WORD 0 ; console input buffer input pointer CIOPTR: WORD 0 ; console input buffer output pointer = (.-CASETBL)/2 ; ; BOOTOF: WORD 0X1FED WORD 0XFE00 FKEYPTR: WORD 0 FUNCS: #REPEAT 0X10 ; Allocate empty func key BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 #ENDREP BYTE 0X1B,"OO",0,0, ; Recover destination register POP ES RET HDCPOLL: WORD 0 ; Linkage words for poller WORD 0 ; IN AL,INTREG ; Is the command done yet ? ; TEST  ; CISPH: ; console input semaphore WORD 0 ; semaphore count WORD . ; semaphore list head WORD .-2 ; KBDFL: BYTE 0 ; keyboard locked flag DELAY: BYTE DLYCNT ; key repeat delay counter RATE: BYTE 0 ; key repeat rate counter ; ; Ke0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OP",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OQ",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OR",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OS",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B, AL,=0X02 ; JZ __X ; LEA BX,HDCPOLL ; Yes, delink from polling Q ; CALL UNLINK# ; LEA BX,DWTSPH ; Free up main driver task ; CALL SIGNAL# __X: RET ; ; ; Function=3y translation table for keyboard data 5E-FF hex. ; A byte of FF in the table means key is ignored. ; KEYTBL: BYTE 0X18 ; 5E - Control-X BYTE "-" ; 5F ; #REPEAT 0X6A-0X60 ; 60 to 69 - undefined codes BYTE 0XFF #ENDREP ; BYTE "*" ; 6A"OT",0,0,0,0,0,0,0,0,0,0,0,0,0 #REPEAT 0X10 BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 #ENDREP BYTE 0X1B,"OU",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OV",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OW",0,0,, return drive ready status ; RETRDY: MOV AL,PDRDRV[SI] ; Return ready code DEC AL JS __1 DEC AL __1: RET END  BYTE "+" ; 6B BYTE 0XFF ; 6C - undefined code BYTE "-" ; 6D BYTE "." ; 6E BYTE "/" ; 6F BYTE "0" ; 70 BYTE "1" ; 71 BYTE "2" ; 72 BYTE "3" ; 73 BYTE "4" ; 74 BYTE "5" ; 75 BYTE "6" ; 76 BYTE "7" ; 77 B 0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OX",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OY",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0X1B,"OZ",0,0,0,0,0,0,0,0,0,0,0,0,0 BYTE 0 ; ; ; Local console initialization routine. ; LOC  ; Get ^current func key buffer MOV DX,BX ; Initialize pointer return val OR BX,BX ; Is there an active key ? MOV CL,[BX] ; Get the char just in case ? JB __XL1 ; if not, continue MOV BX,&KEYTBL-0X5E ; get key translate table addr XLAT ; load the real key value CMP AL,=0XFF ; undefined code? JNZ __C2 ; if not, continue POP BX ; Recover buffer pointer Code# ; locate in code segment ; CONNIT:: IN AL,KBD_DATA ; clear intrps once IN AL,KBD_DATA ; and again ; MOV DX,&KBDISR ; get ISR entry point MOV AL,=KBDIREQ ; get keyboard IREQ level CALL INTENA# ; enable interrupts from device ;  MOV BX,CIOPTR ; Get the normal buffer pointer JZ __0 ; Is there a key active ? OR CL,CL ; Yes, is there valid data ? JZ __F2 OR AL,0XFF  JMP __0 ; Yes, try reading next char ; __XL1: MOV BX,&SPECTBL ; get special sub table addr MOV CL,=SPECTLN ; and length __XL2: CMP AL,0[BX] ; match? JZ __XL3 ; if so, continue ADD BX,=2 ; select next entry DEC CLMOV BX,CIBSIZ ; get console input buffer size CALL ALLOC# ; allocate console input buffer MOV CIBADR,BX ; save console input buffer addr ADD BX,CIBSIZ ; calculate zero position MOV CIIPTR,BX ; set console input pointer ; Yes, return with it INC DX ; Update key buffer pointer __X: RET __F2: XOR DX,DX ; No, cancel function key __0: XOR AL,AL ; clear reg CMP BX,CIIPTR ; compare to input po ; any left? JNZ __XL2 ; if so, continue loop JMPS __C2 ; else, continue __XL3: MOV AL,1[BX] ; get substitute scan code ; __C2: MOV CL,AL ; move key data to reg CALL CASES ; do caps and shift cases TEST CH,=1<<1  MOV CIOPTR,BX ; set console output pointer ; RET ; and exit ; ; ; Local driver entry point. ; CONDR_:: MOV AL,DL ; get function number CMP AL,=10 ; function number = 10? JZ __CO0 ; if so, do char output OR AL,AL ; funcinter JZ __X ; if equal, continue MOV AX,CIBADR ; get buffer base ADD AX,CIBSIZ ; calc end of buffer CMP AX,BX ; buffer wrap? JNZ __1 ; if not, continue MOV BX,CIBADR ; reset buffer out pointer __1: MOV AL,[BX] ; Is the control key down ? JZ __C4 ; if not, continue MOV AL,CL ; get char value CALL UPCASE ; fold to upper case CMP AL,=0X40 ; is key below control range? JB __C4 ; if so, continue CMP AL,=0X5F ; is key above control range? JAtion = 0? JZ CONST ; if so, do char status DEC AL ; function = 1? JZ CONIN ; if so, do char input DEC AL ; function = 2? JZ __CO ; if so, do char output SUB AL,=8-2 ; function = 8? JZ CONSI ; if so, do error shift in DEC AL  ; load the char INC BX ; Index to shift status MOV CH,[BX] ; Load shift status INC BX PUSH BX ; Save buffer pointer CMP A __C4 ; if so, continue AND AL,=0X1F ; mask to control values MOV CL,AL ; Return character in CL __C4: POP BX ; Recover buffer pointer OR AL,=0XFF ; Return status ; function = 9? JZ CONSO ; if so, do error shift out XOR AL,AL ; clear return status RET ; and exit ; __CO0: CMP WORD SMXSPH#,=0000 ; Is the screen busy ? JNE __CO XOR AL,AL ; Yes, returnL,=0X80 ; function key ? JB __C6 CMP AL,=0X95 JA __C6 XOR AH,AH ; Yes, calculate address of key SHR CH,=1 ; Is the FUNC shift down ? FF and Z = 0 RET ; ; KBDISR: PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS ; save regs CALL GETSDS# ; get system data seg CALL KBDIN ; do keyboard request stuff MOV AL,=KBDIREQ ; get keyboard IREQ level CALL SIGEOI# ; signal  bad status RET __CO: JMP SCREEN# ; CONSO: CONSI: CALL DMS# ; position to next line BYTE ACR,ALF,0 RET ; done ; CONST: CALL CHKCIB ; check input buffer RET ; exit ; CONIN: CALL CHKCIB ; check console input buffer  JNC __F1 ADD AL,=0X16 ; Yes, shift up to upper set __F1: SHL AL,=1 ; Multiply key number by 16 SHL AX,=1 SHL AX,=1 SHL AX,=1 ADD AX,&FUNCS EOI condition POP DS POP DX POP CX POP BX POP AX ; restore regs JMP ISRXIT# ; and exit interrupt ; ; ; Keyboard repeat routines. NOTE: Public entry called from "RTCAPC" module. ; KBDREP:: MOV AX,CIIPTR ; get char buffer in pointer JNZ __CI2 ; if char waiting, continue CALL CSRENA# ; enable cursor for console input __CI1: MOV BX,&CISPH ; get console input semaphore CALL WAIT# ; wait for console input CALL CHKCIB ; check input buffer JZ __CI1 ; if false alarm, cont ; Offset into key table MOV BX,AX ; Setup function key pointer MOV CL,[BX] ; Get first character OR CL,CL ; Is there really a character ? JZ  CMP CIOPTR,AX ; compare out pointer, chars present? JNZ __X ; if so, skip repeat stuff IN AL,KBD_SIG ; read signal switches TEST AL,=1<<4 ; test repeat bit, reqeat on? JZ __X ; if so, skip repeat stuff CMP DELAY,=0 ; initial delay compleinue __CI2: MOV CIOPTR,BX ; update buffer out pointer MOV FKEYPTR,DX ; Update function key pointer MOV AL,CL ; get char in reg RET ; and exit ; ; Check the contents of the input buffer. ; CHKCIB: MOV BX,FKEYPTR  __F3 MOV DX,BX ; Yes, increment to next char INC DX JMP __C4 __F3: POP BX ; No, get next character JMP __0 __C6: CMP AL,=0X5E ; special soft keys ted? JZ __C1 ; if so, continue DEC DELAY ; else, decrement delay count __X: RET ; and exit ; __C1: CMP RATE,=0 ; keyboard rate completed? JZ __C2 ; if so, continue DEC RATE ; else, decrement repeat rate count RET ; and exit ; ointer MOV BX,&CISPH ; get console input semaphore PUSH DX ; save reg CALL SIGNAL# ; signal process as ready POP DX ; restore reg __X: RET ; and exit ; ; CASES: MOV AL,=0XC0 ; get mask for shift and caps AND AL,CH ; mask to theseCOMPLETE FLAGS MOV AL,CH ;GET CHANNEL NUMBER MOV AH,=0 ;DOUBLE LENGTH ADD BX,AX ;INDEX INTO FLAGS TABLE MOV AL,[BX] ;GET INITIALIZATION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE DEC BYTE [BX] ;SE __C2: MOV RATE,=RATECNT ; pre-set next rate count JMPS KBDIN1 ; and simulate keyboard interrupt ; ; KBDIN: IN AL,KBD_STAT ; read status AND AL,=0X01 ; key ready JZ __C1 ; if so, continue IN AL,KBD_DATA ; dummy read, reset interrupt RE bits JZ __LC ; if neither, fold to lower case CMP AL,=1<<7 ; caps only? JZ __X ; if so, done MOV BX,&CASETBL ; get case table addr MOV AL,=CASETLN ; get table length __1: CMP CL,0[BX] ; case match? JZ __2 ; if so, continue ADD BX,T INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,LST3BR ;GET BAUD RATE CODE MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX T ; and exit ; __C1: MOV DELAY,=DLYCNT ; pre-set repeat delay timer ; ; Entry point called for keyboard repeat function. ; KBDIN1: IN AL,KBD_SIG ; read switch signal port AND AL,=0X2F ; mask off unused bits MOV DL,AL ; move to reg IN AL=2 ; advance to next case DEC AL ; check count JNZ __1 ; and loop RET ; else exit ; __2: MOV CL,1[BX] ; get case substitute RET ; and exit ; __LC: CMP CL,='A' ; is key below letter range? JB __X ; if so, continue CMP CL,='Z;RESTORE FUNCTION NUMBER __LDRV: MOV AL,DL ;GET FUNCTION NUMBER CMP AL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP AL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV CL,LST3FF ;GET FORM FEED CHARACTE,KBD_SH ; read shift switches TEST AL,=1<<0 ; shift key held? JZ __SH1 ; if not, continue OR DL,=1<<6 ; set additional siganls __SH1: TEST AL,=1<<2 ; caps locked? JZ __SH2 ; if not, continue OR DL,=1<<7 ; set additional signals __SH2: ' ; is key above letter range? JA __X ; if so, continue ADD CL,=0X20 ; fold to lower case __X: RET ; ; UPCASE: CMP AL,='a' ; below lower case? JB __X ; if so, exit CMP AL,='z' ; above lower case? JA __X ; if so, exit SUB AL,=0XR MOV DL,=2 ;SET FUNCTION NUMBER=2 ; LSTOUT: JMP SERIAL# ;CONTINUE ; END IN AL,KBD_DATA ; read key data MOV CL,AL ; Move into comparison reg MOV BX,CIIPTR ; Get buffer pointer CMP CL,=0X96 ; Was the Break/Stop hit ? JNE __QCH 20 ; fold to upper case __X: RET ; exit ; ; ; These routines are called from the screen driver to ; perform the following functions. ; ; Lock the keyboard. ESCAPE # ; KBDLOK:: MOV KBDFL,=0XFF ; set keyboard lock flag RET ; all done  MOV AH,DL ; Is both the CTRL and FUNC ? AND AH,=03 JZ __ATTN JPO __ATTN ; ; Reboot the system ; CLI ; Yes, shut down and jump XOR AX,AX; ; Unlock the keyboard. ESCAPE " ; KBDULK:: MOV KBDFL,=0 ; unlock the keyboard RET ; all done ; END  ; ... into boot ROM MOV SS,AX MOV ES,AX MOV SP,=0XFF00 JMPFI BOOTOF ; ; ; Store contents of the CL and DL register in console input buffer ; __ATTN: MOV CIOPTR,BX ; Flush out keyb#TITLE "TURBODOS PRINTER DRIVER FOR NEC APC (VIA PARALLEL PRINTER ADAPTER)" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; VERSION: 01/04/84 ; MODULE "LSTAPC" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVERoard buffer __QCH: MOV AX,CIBADR ; get buffer base address ADD AX,CIBSIZ ; calc end of buffer CMP AX,BX ; compare to pointer, wrap buffer? JNZ __2 ; if not, continue MOV BX,CIBADR ; point buffer back to start __2: INC BX #TITLE "TURBODOS OPERATING SYSTEM 300 BAUD LIST DRIVER" #SUBTTL "COPYRIGHT 1984 BY SOFTWARE 2000, INC." ; ; COPYRIGHT 1984 BY SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "LST300" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVA SYMBOLIC EQUIVALENCES #INCLUDE "APCEQU" ; NEC-APC equivalences ; LOC Data# ;LOCATE IN DATA SEGMENT ; PPACH:: BYTE 0 ;PARALLEL PRINTER CHANNEL NUMBER INITC: BYTE 0 ;INITIALIZATION COMPLETE FLAG COLCNT: BYTE 0 ;COLUMN COUNTER SPCNT: BYT ; Move buffer to next chars INC BX CMP BX,CIOPTR ; buffer full? JZ __X ; if so, exit MOV -2[BX],CL ; place char in buffer MOV -1[BX],DL ; Save shift key state MOV CIIPTR,BX ; update buffer in pLENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; LST3BR::BYTE 0x25 ;BAUD RATE CODE (300 BAUD) LST3FF::BYTE AFF ;FORM FEED CHARACTER INITC: RES 16 ;INITIALIZATION COMPLETE FLAGS ; LOC Code# ;LOCATE IN CODE SEGMENT ; LSTDR_::MOV BX,&INITC ;GET INIT  E 0 ;SPACE COUNTER LNCNT: BYTE 0 ;LINE COUNTER ; LOSPH: ;LIST OUTPUT SEMAPHORE WORD 0 ;SEMAPHORE COUNT __LOHD: WORD __LOHD ;SEMAPHORE LIST HEAD WORD __LOHD ; LOC Code# ;LOCATE IN DATA SEGMENT ; LSTDR:: LSTDR_::MOV AL,INITC ;GET INITIALIZAT ;INCREMENT IT CMP AL,=66 ;AT TOP OF FORM YET? JC __ULC ;IF NOT, UDATE LINE COUNT XOR AL,AL ;ELSE ,RESET LINE COUNTER __ULC: MOV LNCNT,AL ;UPDATE LINE COUNTER __X: RET ;DONE __HT: MOV AL,COLCNT ;GET COLUMN COUNTER MOV DH,AL ;TO DH-REG AND ALIST MOV BX,&LOSPH ;GET SEMAPHORE ADDRESS CALL SIGNAL# ;SIGNAL PROCESS AS READY __LOPX: RET ;DONE ; END ION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE MOV INITC,=0xFF ;ELSE, SET INIT COMPLETE FLAG MOV AL,=0X94 ; Get 8255 mode byte OUT PAR_CMD,AL MOV AL,=0X05 ; Set INTEL,=~7 ;CALC NEXT TAB STOP ADD AL,=8 SUB AL,DH ;CALC NUMBER OF SPACES REQUIRED MOV DH,AL ;SPACE COUNT TO DH-REG __HTL: MOV CL,=ASP ;GET ASCII SPACE MOV AL,CL ;ASCII SPACE TO A-REG CALL __GR ;OUTPUT SPACES DEC DH ;TO NEXT TAB STOP JNZ __HTL  flag OUT PAR_CMD,AL MOV AL,=0X90 ; Get IRT and Mask OUT PAR_CMD1,AL PUSH CX MOV CX,=03 ; Setup delay for a while __0: LOOP __0 POP CX MOV AL,=0X0E ORET ;DONE __BS: CALL LSTCOM ;OUTPUT BACKSPACE DEC COLCNT ;DECREMENT COLUMN COUNT RET ;DONE __GR: INC COLCNT ;INCREMENT COLUMN COUNT CMP AL,=ASP ;CHARACTER=SPACE? JZ __SP ;IF SO, CONTINUE MOV AL,SPCNT ;ELSE, GET SPACE COUNT TEST AL,AL ;SPACUT PAR_CMD,AL __LDRV: CMP DL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP DL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV AL,COLCNT ;GET COLUMN COUNT PUSH AX ;SAVE COLUMN COUNT MOV CL,=ACR ;GE COUNT=0? JZ LSTCOM ;IF SO, CONTINUE MOV DH,AL ;ELSE, SPACE COUNT TO DH-REG PUSH CX ;SAVE OUTPUT CHARACTER __SPL: MOV CL,=ASP ;GET ASCII SPACE CALL LSTCOM ;OUTPUT SPACES DEC DH JNZ __SPL POP CX ;RESTORE OUTPUT CHARACTER XOR AL,AL MOV SPET CARRIAGE RETURN CALL LSTOUT ;OUTPUT CARRIAGE RETURN POP AX ;RESTORE COLUMN COUNT TEST AL,AL ;COLUMN COUNT=0? JNZ __FF ;IF NOT, CONTINUE MOV AL,LNCNT ;ELSE, GET LINE COUNTER TEST AL,AL ;LINE COUNT=0? JNZ __FF ;IF NOT, CONTINUE RET ;ELSECNT,AL ;SET SPACE COUNT=0 JMPS LSTCOM ;CONTINUE __SP: INC SPCNT ;INCREMENT SPACE COUNT RET ;DONE ; LSTCOM: PUSH DX ;SAVE DX-REG PUSH CX ;SAVE CX-REG MOV DX,&__LOPR ;GET LIST OUTPUT POLL ROUTINE CALL LNKPOL# ;LINK POLL ROUTINE ON POLL LIST #TITLE "TURBODOS OPERATING SYSTEM DATA TERMINAL READY PRINTER DRIVER" #SUBTTL "COPYRIGHT 1984 BY SOFTWARE 2000, INC." ; ; COPYRIGHT 1984 BY SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "LSTCTS" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER S, DONE __FF: MOV CL,=AFF ;GET FORM FEED ; LSTOUT: MOV AL,CL ;GET OUTPUT CHARACTER AND AL,=0x7F ;STRIP PARITY JZ __X ;IF CHARACTER=NULL, DONE MOV CL,AL ;ELSE, CHARACTER TO C-REG CMP AL,=ASP ;GRAPHIC CHARACTER? JNC __GR ;IF SO, PROCESS CMP AL CALL __LOPC ;EXECUTE POLL ROUTINE CODE MOV BX,&LOSPH ;GET SEMAPHORE ADDRESS CALL WAIT# ;DISPATCH, IF NECESSARY POP CX ;RESTORE CX-REG POP DX ;RESTORE DX-REG MOV AL,CL ; Move character into position OUT PAR_DATA,AL REYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; CTSBR:: BYTE 0x6E ;BAUD RATE CODE (9600 BAUD) CTSFF:: BYTE AFF ;FORM FEED CHARACTER INITC: RES 16 ;INITIALIZATION COMPLETE FLAGS ; LOC Code# ;LOCATE IN CODE SEGMENT ; LSTDR_::MOV BX,&IN,=ACR ;CARRIAGE RETURN? JZ __CR ;IF SO, PROCESS CMP AL,=AFF ;FORM FEED? JZ __FF ;IF SO, PROCESS CMP AL,=ALF ;LINE FEED? JZ __LF ;IF SO, PROCESS CMP AL,=AHT ;HORIZONTAL TAB? JZ __HT ;IF SO, PROCESS CMP AL,=ABS ;BACKSPACE? JZ __BS ;IF SO, CT ;DONE __LOPR: WORD 0 ;SUCCESSOR LINK POINTER WORD 0 ;PREDECESSOR LINK POINTER __LOPC: MOV AL,=07 ; Get RMS signal OUT PAR_CMD,AL MOV CX,=10 ; Loop until stable status IN AL,PAR_STAT MOV AH,AITC ;GET INIT COMPLETE FLAGS MOV AL,CH ;GET CHANNEL NUMBER MOV AH,=0 ;DOUBLE LENGTH ADD BX,AX ;INDEX INTO FLAGS TABLE MOV AL,[BX] ;GET INITIALIZATION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE DECONTINUE CMP AL,=ABEL ;BELL? JNZ __X ;IF NOT, CONTINUE JMP LSTCOM ;ELSE, CONTINUE RET ;DONE __CR: CALL LSTCOM ;OUTPUT CARRIAGE RETURN XOR AL,AL MOV COLCNT,AL ;SET COLUMN COUNT=0 MOV SPCNT,AL ;SET SPACE COUNT=0 RET ;DONE __FF: MOV CL,=L __0: IN AL,PAR_STAT CMP AL,AH ; Are the statuses (stati?) stable ? LOOPNZ __0 TEST AL,=0X19 ; Check if no paper or off line ; (1 = no paper, 18 = off line, ;  BYTE [BX] ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,CTSBR ;GET BAUD RATE CODE MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE POP CX ;RESTORE CHANNEL NUMBER/CHARAALF ;GET LINE FEED CHARACTER CALL __LF ;OUTPUT LINE FEED MOV AL,LNCNT ;GET LINE COUNTER TEST AL,AL ;AT TOP OF FORM YET? JZ __X ;IF SO, DONE JMPS __FF ;ELSE, CONTINUE __LF: CALL LSTCOM ;OUTPUT LINE FEED MOV AL,LNCNT ;GET LINE COUNTER INC AL 80 = no power, 2 = ready to receive) JNZ __LOPX ; Bail out if not ready TEST AL,=0X02 ; Check for printer busy JZ __LOPX MOV BX,&__LOPR ;GET LIST OUTPUT POLL ROUTINE CALL UNLINK# ;UNLINK POLL ROUTINE FROM POLL  CTER POP DX ;RESTORE FUNCTION NUMBER __LDRV: MOV AL,DL ;GET FUNCTION NUMBER CMP AL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP AL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV CL,CTSFF ;GET FORM  JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV CL,ETXFF ;GET FORM FEED CHARACTER MOV DL,=2 ;SET FUNCTION NUMBER=2 ; LSTOUT: CALL __GCCA ;GET CHARACTER COUNT ADDRESS MOV AL,[BX] ;GET CHARACTER COUNT CMP AL,ETXLEN ;MAX CHARACTER CFEED CHARACTER MOV DL,=2 ;SET FUNCTION NUMBER=2 ; LSTOUT: JMP SERIAL# ;CONTINUE ; END OUNT OUTSTANDING? JC __OUT ;IF NOT, CONTINUE CALL __GSCA ;ELSE, GET SEQUENCE COUNT ADDRESS MOV AL,[BX] ;GET SEQUENCE COUNT TEST AL,AL ;IN ESCAPE SEQUENCE? JNZ __OUT ;IF SO, CONTINUE PUSH CX ;ELSE, SAVE OUTPUT CHARACTER MOV CL,=AETX ;GET ETX CHARACTER CALL __SOUT ;OUTPUT ETX CHARACTER __WAIT: CALL __SIN ;ELSE, GET SERIAL INPUT AND AL,=0x7F ;STRIP SIGN BIT SUB AL,=AACK ;CHARACTER=ACK? JNZ __WAIT ;IF NOT, WAIT CALL __GCCA ;ELSE, GET CHARACTER COUNT ADDRESS MOV [BX],AL ;RESET CHARA#TITLE "TURBODOS PRINTER DRIVER FOR IBM PC (VIA PARALLEL PRINTER ADAPTER)" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; VERSION: 01/04/84 ; MODULE "LSTPPA" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER CTER COUNT POP CX ;RESTORE OUTPUT CHARACTER __OUT: MOV AL,CL ;GET OUTPUT CHARACTER AND AL,=0x7F ;STRIP SIGN BIT CMP AL,=AESC ;CHARACTER=ESCAPE? JNZ __NESC ;IF NOT, CONTINUE CALL __GSCA ;ELSE, GET SEQUENCE COUNT ADDRESS MOV AL,ETXSEQ ;GET MASYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; PPACH:: BYTE 0 ;PARALLEL PRINTER CHANNEL NUMBER INITC: BYTE 0 ;INITIALIZATION COMPLETE FLAG COLCNT: BYTE 0 ;COLUMN COUNTER SPCNT: BYTE 0 ;SPACE COUNTER LNCNT: BYTE 0 ;LINE COUNTER ; LOS#TITLE "TURBODOS OPERATING SYSTEM ETX/ACK PRINTER DRIVER" #SUBTTL "COPYRIGHT 1984 BY SOFTWARE 2000, INC." ; ; COPYRIGHT 1984 BY SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "LSTETX" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIX ESCAPE SEQUENCE LENGTH MOV [BX],AL ;SET SEQUENCE COUNT __NESC: CALL __SOUT ;OUTPUT CHARACTER CALL __GCCA ;GET CHARACTER COUNT ADDRESS INC BYTE [BX] ;INCREMENT CHARACTER COUNT CALL __GSCA ;GET SEQUENCE COUNT ADDRESS DEC BYTE [BX] ;DECREMENT SPH: ;LIST OUTPUT SEMAPHORE WORD 0 ;SEMAPHORE COUNT __LOHD: WORD __LOHD ;SEMAPHORE LIST HEAD WORD __LOHD ; LOC Code# ;LOCATE IN DATA SEGMENT ; LSTDR_::MOV AL,INITC ;GET INITIALIZATION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SETVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; ETXBR:: BYTE 7 ;BAUD RATE CODE (1200 BAUD) ETXLEN::BYTE 140 ;CHARACTER COUNT BETWEEN ETX'S ETXSEQ::BYTE 3 ;MAX ESCAPE SEQUENCE LENGTH ETXFF:: BYTE AFF ;FORM FEED CHARACTER CHRCNT: RES 16 ;CHARACTER COEQUENCE COUNT JNS __X ;IF POSITIVE, DONE INC BYTE [BX] ;ELSE, RESTORE COUNT TO 0 __X: RET ;DONE __SIN: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX ;SAVE FUNCTION NUMBER MOV DL,=1 ;SET FUNCTION NUMBER=1 CALL SERIAL# ;GET SERIAL INPUT JMPS? JNZ __LDRV ;IF SO, CONTINUE MOV INITC,=0xFF ;ELSE, SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER MOV DL,PPACH ;GET PRINTER CHANNEL NUMBER MOV DH,=0 ;DOUBLE LENGTH MOV AH,=1 ;SET FUNCTION NUMBER=1 INT 0x17 ;INITIALIZE PRINTER PORT UNT SEQCNT: RES 16 ;SEQUENCE COUNT INITC: RES 16 ;INITIALIZATION COMPLETE FLAGS ; LOC Code# ;LOCATE IN CODE SEGMENT ; LSTDR_::MOV BX,&INITC ;GET INIT COMPLETE FLAGS CALL INDEX ;INDEX INTO FLAGS TABLE MOV AL,[BX] ;GET INITIALIZATION COMPLETE FLA __SIOC ;CONTINUE __SOUT: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX ;SAVE FUNCTION NUMBER CALL SERIAL# ;OUTPUT CHARACTER __SIOC: POP DX ;RESTORE FUNCTION NUMBER POP CX ;RESTORE CHANNEL NUMBER/CHARACTER RET ;DONE __GCCA: MOV BX,&CHRCNT ;GE POP DX ;RESTORE FUNCTION NUMBER __LDRV: CMP DL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP DL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV AL,COLCNT ;GET COLUMN COUNT PUSH AX ;SAVE COLUMN COUNT G TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE DEC BYTE [BX] ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,ETXBR ;GET BAUD RATE CODE MOV DL,=3 ;SET FUNCTION T CHARACTER COUNT TABLE JMPS INDEX ;CONTINUE __GSCA: MOV BX,&SEQCNT ;GET SEQUENCE COUNT TABLE ; INDEX: PUSH AX ;SAVE AX-REG MOV AL,CH ;CHANNEL NUMBER TO AX-REG MOV AH,=0 ;DOUBLE LENGTH ADD BX,AX ;INDEX INTO TABLE POP AX ;RESTORE AX-REG RET  MOV CL,=ACR ;GET CARRIAGE RETURN CALL LSTOUT ;OUTPUT CARRIAGE RETURN POP AX ;RESTORE COLUMN COUNT TEST AL,AL ;COLUMN COUNT=0? JNZ __FF ;IF NOT, CONTINUE MOV AL,LNCNT ;ELSE, GET LINE COUNTER TEST AL,AL ;LINE COUNT=0? JNZ __FF ;IF NOT, CONTINNUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER __LDRV: MOV AL,DL ;GET FUNCTION NUMBER CMP AL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP AL,=7 ;FUNCTION NUMBER=7? ;DONE ; END  UE RET ;ELSE, DONE __FF: MOV CL,=AFF ;GET FORM FEED ; LSTOUT: MOV AL,CL ;GET OUTPUT CHARACTER AND AL,=0x7F ;STRIP PARITY JZ __X ;IF CHARACTER=NULL, DONE MOV CL,AL ;ELSE, CHARACTER TO C-REG CMP AL,=ASP ;GRAPHIC CHARACTER? JNC __GR ;IF SO, P ON POLL LIST CALL __LOPC ;EXECUTE POLL ROUTINE CODE MOV BX,&LOSPH ;GET SEMAPHORE ADDRESS CALL WAIT# ;DISPATCH, IF NECESSARY POP CX ;RESTORE CX-REG MOV DL,PPACH ;GET PRINTER CHANNEL NUMBER MOV DH,=0 ;DOUBLE LENGTH MOV AL,CL ;GET OUTPUT CHAR #TITLE "Screen routine tester" #SUBTTL "Copyright (C) John E. Lauber" #PAGE 132,66 ; MODULE "LSTTST" ; TLINK "X" ; #INCLUDE "EQUATE" ; LOC Code# ; START: ; __LOOP: MOV CL,=DCFCN MOV DL,=0XFF INT OPSYSC OR AL,AL JZ __LOOP MOV ROCESS CMP AL,=ACR ;CARRIAGE RETURN? JZ __CR ;IF SO, PROCESS CMP AL,=AFF ;FORM FEED? JZ __FF ;IF SO, PROCESS CMP AL,=ALF ;LINE FEED? JZ __LF ;IF SO, PROCESS CMP AL,=AHT ;HORIZONTAL TAB? JZ __HT ;IF SO, PROCESS CMP AL,=ABS ;BACKSPACE? JZACTER MOV AH,=0 ;SET FUNCTION NUMBER=0 INT 0x17 ;OUTPUT CHARACTER POP DX ;RESTORE DX-REG RET ;DONE __LOPR: WORD 0 ;SUCCESSOR LINK POINTER WORD 0 ;PREDECESSOR LINK POINTER __LOPC: MOV DL,PPACH ;GET PRINTER CHANNEL NUMBER MOV DH,=0 ;DOUBLE LECL,AL CMP AL,='~' JZ __EXIT MOV DL,=2 CALL LSTDR# JMPS __LOOP ; __EXIT: RETF ; KBDLOK:: KBDULK:: LNKPOL:: UNLINK:: WAIT:: SIGNAL:: RET ; END START  __BS ;IF SO, CONTINUE CMP AL,=ABEL ;BELL? JNZ __X ;IF NOT, CONTINUE JMP LSTCOM ;ELSE, CONTINUE RET ;DONE __CR: CALL LSTCOM ;OUTPUT CARRIAGE RETURN XOR AL,AL MOV COLCNT,AL ;SET COLUMN COUNT=0 MOV SPCNT,AL ;SET SPACE COUNT=0 RET ;DONE NGTH MOV AH,=2 ;SET FUNCTION NUMBER=2 INT 0x17 ;GET PRINTER PORT STATUS TEST AH,=1<<7 ;PRINTER NOT BUSY BIT SET? JZ __LOPX ;IF NOT, CONTINUE MOV BX,&__LOPR ;GET LIST OUTPUT POLL ROUTINE CALL UNLINK# ;UNLINK POLL ROUTINE FROM POLL LIST MOV B __FF: MOV CL,=ALF ;GET LINE FEED CHARACTER CALL __LF ;OUTPUT LINE FEED MOV AL,LNCNT ;GET LINE COUNTER TEST AL,AL ;AT TOP OF FORM YET? JZ __X ;IF SO, DONE JMPS __FF ;ELSE, CONTINUE __LF: CALL LSTCOM ;OUTPUT LINE FEED MOV AL,LNCNT ;GET LINE CX,&LOSPH ;GET SEMAPHORE ADDRESS CALL SIGNAL# ;SIGNAL PROCESS AS READY __LOPX: RET ;DONE ; END OUNTER INC AL ;INCREMENT IT CMP AL,=66 ;AT TOP OF FORM YET? JC __ULC ;IF NOT, UDATE LINE COUNT XOR AL,AL ;ELSE ,RESET LINE COUNTER __ULC: MOV LNCNT,AL ;UPDATE LINE COUNTER __X: RET ;DONE __HT: MOV AL,COLCNT ;GET COLUMN COUNTER MOV DH,AL ;TO DH-REG AND AL,=~7 ;CALC NEXT TAB STOP ADD AL,=8 SUB AL,DH ;CALC NUMBER OF SPACES REQUIRED MOV DH,AL ;SPACE COUNT TO DH-REG __HTL: MOV CL,=ASP ;GET ASCII SPACE MOV AL,CL ;ASCII SPACE TO A-REG CALL __GR ;OUTPUT SPACES DEC DH ;TO NEXT TAB STOP JNZ __HTL RET ;DONE __BS: CALL LSTCOM ;OUTPUT BACKSPACE DEC COLCNT ;DECREMENT COLUMN COUNT RET ;DONE __GR: INC COLCNT ;INCREMENT COLUMN COUNT CMP AL,=ASP ;CHARACTER=SPACE? JZ __SP ;IF SO, CONTINUE MOV AL,SPCNT ;ELSE, GET SPACE COUNT TEST AL,AL ;SPACE COUNT=0? JZ LSTCOM ;IF SO, CONTINUE MOV DH,AL ;ELSE, SPACE COUNT TO DH-REG PUSH CX ;SAVE OUTPUT CHARACTER __SPL: MOV CL,=ASP ;GET ASCII SPACE CALL LSTCOM ;OUTPUT SPACES DEC DH JNZ __SPL POP CX ;RESTORE OUTPUT CHARACTER XOR AL,AL MOV SPCNT,AL ;SET SPACE COUNT=0 JMPS LSTCOM ;CONTINUE __SP: INC SPCNT ;INCREMENT SPACE COUNT RET ;DONE ; LSTCOM: PUSH DX ;SAVE DX-REG PUSH CX ;SAVE CX-REG MOV DX,&__LOPR ;GET LIST OUTPUT POLL ROUTINE CALL LNKPOL# ;LINK POLL ROUTINE #TITLE "TURBODOS OPERATING SYSTEM XON/XOFF PRINTER DRIVER" #SUBTTL "COPYRIGHT 1984 BY SOFTWARE 2000, INC." ; ; COPYRIGHT 1984 BY SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "LSTXON" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUnt base MEMSIZ::WORD 0X4000-0X0040 ; memory segment length ; END IVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; XONBR:: BYTE 7 ;BAUD RATE CODE (1200 BAUD) XONFF:: BYTE AFF ;FORM FEED CHARACTER INITC: RES 16 ;INITIALIZATION COMPLETE FLAGS ; LOC Code# ;LOCATE IN CODE SEGMENT ; LSTDR_::MOV BX,&INITC ;GET INIT COMPLETE FLAGS MOV AL,CH ;CHANNEL NUMBER TO AX-REG MOV AH,=0 ;DOUBLE LENGTH ADD BX,AX ;INDEX INTO FLAGS TABLE MOV AL,[BX] ;GET INITIALIZATION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE DEC BYTE [BX] ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,XONBR ;GET BAUD RATE CODE MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER __LDRV: MOV AL,DL ;GET FUNCTION NUMBER CMP AL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP AL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV CL,XONFF ;GET FORM FEED CHARACTER MOV DL,=2 ;SET FUNCTION NUMBER=2 ; LSTOUT: CALL __SST ;GET SERIAL STATUS TEST AL,AL ;CHARACTER AVAILABLE? JZ __OUT ;IF NOT, CONTINUE CALL __SIN ;ELSE, GET SERIAL INPUT AND AL,=0x7F ;STRIP SIGN BIT CMP AL,=ADC3 ;CHARACTER=DC3 (XOFF)?  JNZ LSTOUT ;IF NOT, WAIT __WAIT: CALL __SIN ;GET SERIAL INPUT AND AL,=0x7F ;STRIP SIGN BIT CMP AL,=ADC1 ;CHARACTER=DC1 (XON)? JNZ __WAIT ;IF NOT, WAIT __OUT: JMP SERIAL# ;OUTPUT CHARACTER __SST: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX #TITLE "Initialization for the NEC-APC" #SUBTTL "Copyright (c) 1984 Multi Micro Corp." #PAGE 132,66 ; ; NITAPC.A ; Written by: John Lauber ; MODULE "NITAPC" ; module ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU"  ;SAVE FUNCTION NUMBER MOV DL,=0 ;SET FUNCTION NUMBER=0 CALL SERIAL# ;GET SERIAL STATUS JMPS __SSIC ;CONTINUE __SIN: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX ;SAVE FUNCTION NUMBER MOV DL,=1 ;SET FUNCTION NUMBER=1 CALL SERIAL# ;GET SERIAL#TITLE "TURBODOS OPERATING SYSTEM MEMORY SPECIFICATION TABLE (NEC-APC)" #SUBTTL "COPYRIGHT 1984, SOFTWARE 2000, INC." ; ; COPYRIGHT 1984, SOFTWARE 2000, INC. ; ; Version date: 07/25/84 ; ; Edit History: ; 01/05/84 rr - Module created. ; 07/25/84 j ; common APC equivalences ; ; This module contains all the default NEC-APC system initialization ; and the interrupt structure. All software devices should be reset ; and cleared in this module. ; ; Additional standard TurboDOS modules are called  INPUT __SSIC: POP DX ;RESTORE FUNCTION NUMBER POP CX ;RESTORE CHANNEL NUMBER/CHARACTER RET ;DONE ; END l - Module converted from IBM-PC version. ; MODULE "MSTAPC" ; module ID ; #INCLUDE "DREQUATE" ; driver symbolic equivalences ; LOC Data# ; locate in data segment ; MEMTBL::BYTE 1 ; number of memory segments WORD 0X0040 ; memory segme to initialize from ; this module. ; ; "INTENA" - Global routine. ; On entry: AL = Valid vector level number on PIC's, (0-14) ; DX = ISR offset address. ; ; "CLRMSK" - Clear PIC vector mask. ; -or- ; "SETMSK" - Set PIC vector mask. ; -or- umber (0-15), DX=ISR offset. ; INTENA:: MOV BL,AL ; prep vector reg CMP BL,=6 ; IR0-6 on master? JBE __C1 ; if so, continue CMP BL,=14 ; valid IREQ? JA __X ; if not, skip and exit INC BL ; adjust vector for slave __C1: PUSH AX ; "SIGEOI" - Signal specific EOI. ; On entry: AL = Valid vector level number on PIC's, (0-14) ; ; MICVEC == 32 ; master UIC base assignment SICVEC == 40 ; slave UIC base assignment ; LOC 0 ; interrupt page layout ; INTSEG: ; RES 4*MICVEC; save vector PUSH DS ; save data seg MOV AX,=INTSEG MOV DS,AX ; select base page XOR BH,BH ; make vector double length ADD BX,BX ; times 2 ADD BX,BX ; times 4 for vector base MOV IRBASE+0[BX],DX ; store offset MOV IRBASE+2[BX],C ; IRBASE: ; IR0-14 base (base UIC VI addr) ; ; LOC Code# ; locate in code segment ; HDWNIT:: ; TurboDOS called entry ; ; Initialize Interrupt Controllers. ; MOV AL,=0X11 ; edge trig'red, cascade, ICW4 OUT MIC_P0,AL ; ICW1 MOV AS ; and segment POP DS ; restore data seg POP AX ; restore vector CALL CLRMSK ; and clear the mask __X: RET ; exit ; ; ; Clear interrupt mask bit. AL=IREQ number (0-14). ; CLRMSK:: XOR AH,AH ; flags = clear operation JMPS MSKCOL,=MICVEC ; vector address (T7-T3) OUT MIC_P1,AL ; ICW2 MOV AL,=0X80 ; IREQ-7 has a slave OUT MIC_P1,AL ; ICW3 MOV AL,=0X01 ; Normal EOI, 8086 mode OUT MIC_P1,AL ; ICW4 MOV AL,=0XFF ; mask all IREQ's OUT MIC_P1,AL ; OCW1 ; MOV AL,=M ; and join common ; ; Set interrupt mask bit. AL=IREQ number (0-14). ; SETMSK:: OR AH,=0XFF ; flag = set operation ; MSKCOM: MOV CL,AL ; prep reg MOV DX,=MIC_P1 ; assume master IC port first CMP CL,=6 ; IR0-6? JBE __C1 ; if so, co0X11 ; edge trig'red, cascade, ICW4 OUT SIC_P0,AL ; ICW1 MOV AL,=SICVEC ; vector address (T7-T3) OUT SIC_P1,AL ; ICW2 MOV AL,=0X07 ; Slave ID number OUT SIC_P1,AL ; ICW3 MOV AL,=0X01 ; Slave, Normal EOI, 8086 mode OUT SIC_P1,AL ; ICW4ntinue CMP CL,=14 ; valid IR? JA __X ; if not, exit SUB CL,=7 ; adjust for IR7=14 MOV DX,=SIC_P1 ; load slave IC port __C1: MOV BL,=1 ; init a bit SHL BL,CL ; calc bit position PUSHF ; save machine status CLI ; and disable i #TITLE "Real-Time-Clock driver for the NEC-APC" #SUBTTL "Copyright (C) Multi-Micro Computer Corp." ; ; RTCAPC.A ; Written by: John E. Lauber ; ; Version: 8/12/84 ; ; Edit History: ; 8/12/84 jl - Module created. ; MODULE "RTCAPC" ; #INCLUDE MOV AL,=0XFF ; mask all IREQ's OUT SIC_P1,AL ; OCW1 ; ; Init all vectors to dummy ISR offset. ; PUSH DS ; save data segment MOV AX,=INTSEG ; get interrupt seg MOV DS,AX ; select base seg XOR BX,BX ; clear base offset MOV CX,=256 nterrupts IN AL,DX ; read current device mask TEST AH,AH ; set or clear? JNZ __S ; if set, continue NOT BL ; invert logic AND AL,BL ; and clear IMSK bit JMPS __C2 ; and continue __S: OR AL,BL ; set IMSK bit __C2: OUT DX,AL ; a "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; common APC equivalences ; ; Some local equates. ; RTCIREQ == 3 ; Interrupt request level RTCCNT == 49152 ; interval count value TICSEC == 50 ; number of ticks per second ; LOC D ; get count __IL: MOV [BX],WORD &DMYISR ; load dummy ISR offset INC BX INC BX ; advance pointer MOV [BX],CS ; and our code seg INC BX INC BX ; advance pointer LOOP __IL ; continue for the count POP DS ; restore data segment ; ;nd send back to device POPF ; restore status __X: RET ; and exit ; ; ; Signal EOI for specific IREQ. AL=IREQ number (0-14) ; SIGEOI:: MOV DX,=MIC_P0 ; assume master IC port CMP AL,=6 ; IR0-6? JBE __C1 ; if so, continue CMP AL,=1ata# ; locate in data segment ; TICCNT: BYTE 0 ; tick counter ; LOC Code# ; locate in code segment ; RTCNIT:: MOV AL,=0X30 ; mode 0, intrp on count end OUT IT_MODE,AL ; set counter channel MOV AL,=1<<2 ; get timer intrp reset bit OU Allow other modules to initialize. ; CALL CONNIT# ; console initialization CALL RTCNIT# ; RTC initialization CALL SPINIT# ; serial/parallel init ; CALL DSKINA# ; disk driver A CALL DSKINB# ; disk driver B CALL DSKINC# ; disk driv4 ; valid IR? JA __X ; if not, exit SUB AL,=7 ; adjust number MOV DX,=SIC_P0 ; and select slave IC port __C1: OR AL,=0X60 ; combine command bits OUT DX,AL ; signal specific EOI __X: RET ; and exit ; ; DMYISR: IRET ; dummy interT CRT_IRST,AL ; clear possible interrupt MOV DX,=IT_CNT0 ; get counter port MOV AX,=RTCCNT ; get count value OUT DX,AL ; send LSB first MOV AL,AH OUT DX,AL ; and MSB second ; MOV AL,=RTCIREQ ; get interrupt request level MOV DX,&RTCIer C CALL DSKIND# ; disk driver D ; CALL CKTINA# ; network driver A CALL CKTINB# ; network driver B CALL CKTINC# ; network driver C CALL CKTIND# ; network driver D ; RET ; all done, so exit ; ; ; Enable 8259 IREQ's. AL=IREQ nrupt service routine ; END  SR ; get interrupt service address JMP INTENA# ; enable interrupt controller and exit ; ; RTC interrupt service routine. ; RTCISR: PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS ; save environment CALL GETSDS# ; get system data segment ; RDAT == 0XA0 ; data read commands CURD == 0XE0 ; cursor address read DMAR == 0XA4 ; DMA read request DMAW == 0X24 ; DMA write request ; ; LOC Data# ; locate in data segment ; ; User defined tab size. ; NOTE: Set to desired tab size 2 th MOV AL,=1<<2 ; get timer intrp reset bit OUT CRT_IRST,AL ; and clear condition MOV DX,=IT_CNT0 ; get counter port MOV AX,=RTCCNT ; get count value OUT DX,AL ; send LSB first MOV AL,AH OUT DX,AL ; and MSB second ; INC TICCNT ; bumprough 16. ; TABSIZ::BYTE 8 ; default tab size ; ; User defined start up cursor mode. ; NOTE: 0 = non-displayed, 1&2 = blinking block, 3&4= blinking underline. ; CURSOR::BYTE 2 ; default cursor mode ; ; User defined status line enable. ; NOTE: tick counter CMP TICCNT,=TICSEC ; second reached JB __NOT1S ; if not, continue MOV TICCNT,=0 ; reset tick counter CALL RTCSEC# ; call for one second count __NOT1S: CALL DLYTIC# ; call for tick service CALL KBDREP# ; call for keyboar Set to 0XFF for enable and 0 for disable. ; SLFLAG::BYTE 0XFF ; default status line enable ; FLAGS: BYTE 0 ; driver flag byte (def follows) INIT == 1<<0 ; initialization flag WRPFL == 1<<1 ; write protected flag ULRFL == 1<<6 ; user line d repeat check CALL CSRCHK# ; call for cursor enable check ; MOV AL,=RTCIREQ ; get RTC interrupt request level CALL SIGEOI# ; and signal end-of-interrupt POP DS POP DX POP CX POP BX POP AX ; restore environment JMP ISRXIT# ; exi #TITLE "NEC-APC Smart Screen Driver Interface" #SUBTTL "For the TurboDOS operating system" #PAGE 132,66 ; ; SCRAPC.A ; ; Version date: 8/18/84 ; ; Edit History: ; 7/12/84 dds Module Created. ; 8/18/84 dds Added cursor delayed enable featuload (reverse) flag ; CURSCR: BYTE 1 ; current screen number SAVSCR: BYTE 0 ; save screen variable ROWCOL: WORD 0 ; current row/column (low/high) NXTSEQ: WORD 0 ; next routine in escape sequence BEGROW: BYTE 0 ; beginning row number ENDROWt interrupt service routine ; END re ; MODULE "SCRAPC" ; module ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; common NEC-APC equivalences ; ; Some screen parameters ; NMBROWS == 26 ; number of user rows NMBCOLS == 80 ; number of user columns : BYTE NMBROWS-1 ; ending row number TOPROW: BYTE 0 ; current top row number TMPROW: BYTE 0 ; temp row storage area CSRDLY: BYTE 0 ; cursor delayed enable counter ; SMXSPH: WORD 1 ; screen mutual exclusion semaphore WORD . WORD .-2 ; ;  STATROW == 25 ; status row CSRCNT == 2 ; delay in ticks for cursor displaying ; ATTROFF == 0X1000 ; attribute memory offset constant ; ; GDC status register definition ; DR == 1<<0 ; data ready in FIFO FF == 1<<1 ; FIFO full FE == 1<<2  ; ASCII control code lookup table. ; CTLTBL == . ; base of the lookup table BYTE 0X07 ; #1 BYTE 0X08 ; #2 BYTE 0X09 ; #3 BYTE 0X0A ; #4 BYTE 0X0B ; #5 BYTE 0X0C ; #6 BYTE 0X0D ; #7 BYTE 0X1A ; #8 BYTE 0X1B ; #9 BY ; FIFO empty DW == 1<<3 ; drawing in progress DMA == 1<<4 ; DMA execute VS == 1<<5 ; vertical sync active HB == 1<<6 ; horizontal blank active ; ; GDC commands ; RESET == 0X00 ; reset controller SYNC == 0X0E ; SYNC format specify VSTE 0X1E ; #10 CTBLEN == .-CTLTBL ; length of lookup table ; ; ASCII control code branch table. ; CTBLXEC == . ; base of execution table WORD BELL ; #1 ring the terminal bell WORD BACKSP ; #2 back space WORD HZTAB ; #3 horizontal taYNC == 0X6E ; vertical SYNC mode CCHAR == 0X4B ; cursor and char characteristics START == 0X6B ; start display and end idle mode BCTRL == 0X0C ; display blanking control ZOOM == 0X46 ; zoom factor control CURS == 0X49 ; cursor position speb WORD LINE ; #4 line feed WORD RLINE ; #5 reverse line feed WORD NFSP ; #6 non-destructive forward space WORD RETURN ; #7 carrige return WORD CUPSCR ; #8 clear unprotected screen WORD ENAESC ; #9 enable escape sequence WORDcify PRAM == 0X70 ; parameter RAM load PITCH == 0X47 ; pitch specification WDAT == 0X20 ; write DATA into display memory MASK == 0X4A ; mask register load FIGS == 0X4C ; figure drawing parameters specify FIGD == 0X6C ; figure draw start   HOME ; #10 home cursor ; ; ESCAPE sequence lookup table. ; ESCTBL == . ; base of the lookup table BYTE "=" ; #1 BYTE "*" ; #2 BYTE "T" ; #3 BYTE "Y" ; #4 BYTE "C" ; #5 ETBLEN == .-ESCTBL ; length of lookup table ; ; ESCAPE ARM PRAM2: BYTE 0X00,CRT_PARM PRAM3: BYTE 0X00,CRT_PARM PRAM4: BYTE 0X00,CRT_PARM PRAM5: BYTE 0X00,CRT_PARM PRAM6: BYTE 0X00,CRT_PARM PRAM7: BYTE 0X00,CRT_PARM PRAM8: BYTE 0X00,CRT_PARM PRAMCLN == (.-PRAMCMD)/2 ; ; FIGSCMD: BYTE FIGSCLN BYTEHAR ; point cursor at char memory MOV BX,&WDATCMD CALL GDCOUT ; write single char CALL PNTATTR MOV BX,&WATTCMD CALL GDCOUT ; write single attribute CALL NFSP ; do non-destructive forword space ; UPDCSR: MOV ROWCOL,DX ; update currentsequence branch table. ; ETBLXEC == . ; base of execution table WORD SETXY ; #1 direct cursor addressing WORD CUPSCR ; #2 clear unprotected WORD CUPEOL ; #3 clear end of line WORD CUPEOP ; #4 clear end of page WORD BEGCOLOR ; #5  FIGS,CRT_CMD BYTE 0X02,CRT_PARM FIGSP2: BYTE 0X00,CRT_PARM FIGSP3: BYTE 0X00,CRT_PARM FIGSCLN == (.-FIGSCMD)/2 ; ; LOC Code# ; locate in code segment ; ; Screen entry point. Output char passed in CL register. ; SCREEN:: PUSH SI PUSH DI row/column CALL PNTCHAR ; point cursor at character memory RET ; and exit ; ; The following routine is called from the real-time-clock driver to ; check for the cursor enable delay count. When count of zero is reached, ; the cursor is re-ena set terminal attribute ; ; NITCMD: BYTE __LEN ; CRT initialization command BYTE SYNC|0X01,CRT_CMD ; Character display mode '0': no BYTE 0X10,CRT_PARM ; interlace, flashless drawing, static BYTE 0X4E,CRT_PARM ; RAM, 80 character per row. BYT ; save regs PUSH CX ; save output char MOV BX,&SMXSPH ; get exclusion semaphore addr CALL WAIT# ; dispatch if neccessary POP CX ; restore output char CALL __SCR ; call the driver MOV BX,&SMXSPH ; get exclusion semaphore addr CALLbled. ; CSRCHK:: CMP CSRDLY,=0 ; check for count reached JZ _X1 ; if so, continue DEC CSRDLY ; decrement the count JNZ _X1 ; if count still going ; ; This entry is called from the keyboard input routine to enable the cursor ; unconditioE 0X52,CRT_PARM BYTE 0X0E,CRT_PARM BYTE 0X06,CRT_PARM BYTE 0X13,CRT_PARM BYTE 0XEE,CRT_PARM BYTE 0X45,CRT_PARM BYTE VSYNC|0X01,CRT_CMD ; master video sync BYTE ZOOM,CRT_CMD ; zooming disabled BYTE 0X00,CRT_PARM BYTE PITCH,CRT_CMD ; 80 c SIGNAL# ; signal process completed OR AL,=0XFF ; set status POP DI POP SI ; restore regs RET ; and exit ; __SCR: CLD ; set direction = increment MOV AX,DS MOV ES,AX ; copy DS into ES seg reg TEST FLAGS,=INIT ; test initializanally when waiting on a character. ; CSRENA:: MOV CSRDLY,=0 ; force count to zero OR CCHRP1,=1<<7 MOV BX,&CCHRCMD CALL GDCOUT ; re-enable the cursor _X1: RET ; exit ; ; ; CONTROL CHARACTER FUNCTIONS. ; ENAESC: ; start escape sequeharacter per row BYTE 0X50,CRT_PARM BYTE MASK,CRT_CMD BYTE 0XFF,CRT_PARM BYTE 0XFF,CRT_PARM BYTE PRAM,CRT_CMD BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X0tion flag JNZ __C1 ; if done, continue PUSH CX ; save output char MOV BX,&NITCMD ; get init table addr CALL GDCOUT ; and output it CALL SLINIT ; initialize status line CALL CUPSCR ; clear user screen area OR FLAGS,=INIT ; set initnce. CONTROL-[ MOV NXTSEQ,&BEGESC ; set sequence function number RET ; and exit ; BELL: ; ring the terminal bell. CONTROL-G MOV CL,=ABEL JMP DISPLAY ; HOME: ; home cursor function. CONTROL-^ MOV DL,=0 ; get starting row number 0,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM __LEN == (.-NITCMD)/2 ; CCHRCMD:BYTE CCHRCLN ; curs flag for further entry POP CX ; restore output char __C1: MOV CSRDLY,=CSRCNT ; pre-set cursor delay count AND CCHRP1,=~(1<<7) MOV BX,&CCHRCMD CALL GDCOUT ; disable cursor display MOV DX,ROWCOL ; load current row/column address MOV AX,NX JMPS RETCOM ; and join common ; RETURN: ; carrige return function. CONTROL-M CMP CURSCR,=0 ; screen = user line load? JNZ RETCOM ; if not, continue common MOV CL,SAVSCR ; get restore screen number ;;; CALL SETULS ; and do user line stor char command BYTE CCHAR,CRT_CMD CCHRP1: BYTE 0X92,CRT_PARM CCHRP2: BYTE 0X21,CRT_PARM CCHRP3: BYTE 0X8A,CRT_PARM CCHRCLN == (.-CCHRCMD)/2 ; CSRCMD: BYTE CSRCLN ; specify cursor command BYTE CURS,CRT_CMD CSRLOW: BYTE 0X00,CRT_PARM CSRHI: BYTSEQ ; get possible next escape sequence MOV NXTSEQ,=0 ; always clear it TEST AX,AX ; sequence present? JNZ SEQCOM ; if so, continue CMP CL,=ASP ; displayable char? JNB DISPLAY ; if so, continue MOV DI,&CTLTBL ; get control char lookuff RET ; and exit ; RETCOM: XOR DH,DH ; cursor to starting column JMPS FCKWP ; check write protect stuff ; BACKSP: ; back space function. CONTROL-H DEC DH ; decrement column number CMP DH,=NMBCOLS ; cursor column wrap? JC BCKWPTE 0X00,CRT_PARM CSRCLN == (.-CSRCMD)/2 ; WDATCMD: ; write single char command BYTE WDATCLN BYTE WDAT,CRT_CMD BYTE 0X00,CRT_PARM CHAR: BYTE 0X00,CRT_PARM WDATCLN == (.-WDATCMD)/2 ; WATTCMD: ; write attribute command BYTE WATTCLN BYTEup table MOV AL,CL ; load char MOV CX,=CTBLEN ; get table length REPNZ SCAS BYTE ; look for a match JNZ __X ; if not found, cont MOV BX,=CTBLEN-1 SUB BX,CX ; calc length into table ADD BX,BX ; time 2 for execute table CALLI CTBLX ; if not, continue MOV DH,=NMBCOLS-1 ; cursor back to last column ; drop into reverse line feed function RLINE: ; reverse line feed function. CONTROL-K DEC DL ; decrement row number CMP DL,BEGROW ; cursor reverse row wrap? JC __C1 WDAT|0X10,CRT_CMD CURATTR:BYTE 0X80,CRT_PARM WATTCLN == (.-WATTCMD)/2 ; RDATCMD: BYTE RDATCLN BYTE RDAT|0X10,CRT_CMD RDATCLN == (.-RDATCMD)/2 ; PRAMCMD: ; Write parameter RAM command BYTE PRAMCLN BYTE PRAM,CRT_CMD PRAM1: BYTE 0X00,CRT_PEC[BX] ; execute the function __X: CALL UPDCSR ; do cursor update stuff RET ; and exit ; SEQCOM: CALLI AX ; continue escape sequence JMPS UPDCSR ; do cursor update stuff ; DISPLAY: MOV CHAR,CL ; set char in command string CALL PNTC  ; if so, continue CMP DL,ENDROW ; check upper boundry JBE BCKWP ; if not, continue __C1: MOV DL,ENDROW ; cursor wrap to last row ; BCKWP: TEST FLAGS,=WRPFL ; write protect mode? JZ __X ; if not, continue CALL RETATTR ; get the attribchar MOV CX,=ETBLEN ; get table length REPNZ SCAS BYTE ; look for a match JZ __C ; if found, continue RET ; else just exit ; __C: MOV BX,=ETBLEN-1 SUB BX,CX ; calc length into table ADD BX,BX ; time 2 for execute table JMPI ETBL non-color attributes MOV BX,&WATTCMD JMP GDCOUT ; send write data command ; ; Clear unprotected to end of line. ; CUPEOL: CALL PNTCHAR ; point to char memory MOV AX,=NMBCOLS ; get number of columns SUB AL,DH ; calc remaining columns Dute byte TEST AL,=1<<5 ; protected field? JNZ BACKSP ; if so, try last field __X: RET ; else exit ; NFSP: ; non-dest forward space. CONTROL-L INC DH ; increment column number CMP DH,=NMBCOLS ; cursor column wrap? JC FCKWP ; if nXEC[BX] ; execute the function ; ; ; +------------------------------------+ ; | TERMINAL ESCAPE SEQUENCE FUNCTIONS | ; +------------------------------------+ ; ; Set cursor X-Y address. ; SETXY: MOV NXTSEQ,&SETROW ; next char should be the row EC AL ; adjust for DC write MOV FIGSP2,AL MOV FIGSP3,AH ; set figs parameters MOV BX,&FIGSCMD CALL GDCOUT ; send figs command MOV CHAR,=ASP MOV BX,&WDATCMD CALL GDCOUT ; write data and exit CALL PNTATTR ; point to attribute memory ot, continue XOR DH,DH ; cursor to starting column CMP CURSCR,=0 ; screen = user line load? JNZ LINE ; if not, continue with line feed TEST FLAGS,=ULRFL ; user load reverse flag set? JZ __C1 ; if not, continue CALL DELCHAR ; delete th RET ; done ; SETROW: MOV CH,=NMBROWS ; get number of valid rows CALL CKBIAS ; remove ASCII bias JC _X2 ; if invalid, exit MOV TMPROW,CL ; store in temp variable MOV NXTSEQ,&SETCOL ; next char should be the column _X2: RET ; done ; MOV BX,&FIGSCMD CALL GDCOUT ; send figs command MOV BX,&WATTCMD JMP GDCOUT ; ; ; Clear unprotected to end of page. ; CUPEOP: PUSH DX ; save current row/col __1: CALL CUPEOL ; clear current row to end of line XOR DH,DH ; force first e char at column 0 __C1: MOV DH,=NMBCOLS-1 ; else, reset to last column RET ; and exit ; LINE: ; line feed function. CONTROL-J INC DL ; increment row number CMP DL,ENDROW ; cursor row wrap? JBE FCKWP ; if not, continue TEST FLAGS, SETCOL: MOV CH,=NMBCOLS ; get number of valid columns CALL CKBIAS ; remove ASCII bias JC _X2 ; if invalid, exit MOV DH,CL ; move to reg MOV DL,TMPROW ; get temp stored row JMP FCKWP ; check forward movement and exit ; ; BEGCOLOR: column INC DL ; select next row CMP DL,=NMBROWS ; test against max rows JB __1 ; if still on screen POP DX ; restore row/col RET ; and done ; ; DELCHAR: RET ; ; INSCHAR: RET ; ; ; +----------------------+ ; | STATUS LINE R=WRPFL ; write protect mode on? JZ SCROLL ; if not, continue MOV DL,BEGROW ; reset to first row FCKWP: TEST FLAGS,=WRPFL ; write protect mode? JZ __X ; if not, continue CALL RETATTR ; return attribute byte TEST AL,=1<<5 ; protected f ; set colors attribute MOV NXTSEQ,&SETCOLOR RET ; SETCOLOR: SUB CL,='1' ; remove ASCII bias JB __X ; if invalid, continue CMP CL,=7 ; check upper limit JA __X ; if invalid, continue MOV AL,CL ; move to reg MOV CL,=5 ; get shOUTINES | ; +----------------------+ ; ; Initialize the status line. ; SLINIT: RET ; all done ; ; ; +----------------------------------+ ; | SCREEN DRIVER COMMON SUBROUTINES | ; +----------------------------------+ ; ; Point cursor at currield? JNZ NFSP ; if so, continue __X: RET ; else exit ; ; Scroll the screen. ; SCROLL: DEC DL ; restore last row on screen INC TOPROW ; bump current top row CMP TOPROW,=NMBROWS ; and load the value JB __C1 ; if not, continue MOV ift factor SHL AL,CL ; move bits AND CURATTR,=0X1F ; strip old attributes OR CURATTR,AL ; add new ones __X: RET ; done ; ; ; Check ASCII bias. Limit in CH reg. ; CKBIAS: SUB CL,=ASP ; remove bias, check lower limit JC __X ; if invaent DX specified row/column. ; PNTCHAR: CALL SCRADDR ; calc screen address MOV CSRLOW,AL MOV CSRHI,AH ; load command variables MOV BX,&CSRCMD JMP GDCOUT ; send command and exit ; ; Point cursor at current DX specified attribute field. ;TOPROW,=0 ; reset top row __C1: CALL PRAMOUT ; send scrolling command PUSH DX ; SAVE CURRENT ROW/COLUMN MOV DH,=0 ; SET COLUMN ONE CALL CUPEOL ; clear unprotected end of line POP DX ; RESTORE ROW/COLUMN RET ; all done ; HZTAB: lid, exit CMP CL,CH ; check upper limit CMC ; invert logic __X: RET ; all done, exit ; ; ; Clear unprotected screen. ; CUPSCR: MOV TOPROW,=0 ; reset top row CALL PRAMOUT ; send PRAM values XOR DX,DX ; reset row/column register  PNTATTR: CALL SCRADDR ; calc screen address ADD AX,=ATTROFF MOV CSRLOW,AL MOV CSRHI,AH MOV BX,&CSRCMD JMP GDCOUT ; ; Return the current attribute byte. ; RETATTR: CALL PNTATTR ; point to attribute memory CALL GDCFE ; wait for fi ; horizontal tab. CONTROL-I MOV AL,DH ; get current column XOR AH,AH ; make double length MOV CL,TABSIZ ; get the tab size DIV CL ; calc last tab column MOV AL,TABSIZ SUB AL,AH ; calc length to next stop ADD AL,DH ; calc next tabMOV ROWCOL,DX ; and storage location CALL PNTCHAR ; point cursor at screen memory MOV AL,=NMBROWS ; get number of rows MOV CL,=NMBCOLS ; get column size MUL CL ; calc screen positions DEC AX ; adjust for DC variable MOV FIGSP2,AL MOVfo to empty MOV BX,&RDATCMD ; load read command addr CALL GDCOUT ; and issue it JMP GDCIN ; read returned value and exit ; ; Calc physical screen address from row/column. ; On entry: DL=row, DH=column. ; On exit: AX=screen address. ; SCRA stop CMP AL,=NMBCOLS ; test against number of columns JNC __X ; if over limit, continue, no change MOV DH,AL ; set new column number __X: RET ; all done ; ; BEGESC: MOV DI,&ESCTBL ; get control char lookup table MOV AL,CL ; load  FIGSP3,AH ; set DC variable MOV BX,&FIGSCMD ; get figs command addr CALL GDCOUT ; and send it MOV CHAR,=ASP MOV BX,&WDATCMD CALL GDCOUT CALL PNTATTR ; point to attribute memory MOV BX,&FIGSCMD CALL GDCOUT AND CURATTR,=0XE0 ; reset DDR: MOV CL,DL ; mov current row to reg ADD CL,TOPROW ; add in the top row base CMP CL,=NMBROWS ; check for max row wrap JB __C1 ; if no wrap, continue SUB CL,=NMBROWS ; wrap screen memory __C1: MOV AL,=NMBCOLS ; get constant MUL CL  GDC returned parameter. ; GDCIN: IN AL,CRT_STAT ; read status TEST AL,=DR ; data ready? JZ GDCIN ; if not, loop IN AL,CRT_PARM ; read the data RET ; and return it ; END ; calc beginning row addr MOV CL,DH ; get current column XOR CH,CH ; make double length ADD AX,CX ; calc distance into row RET ; all done ; ; ; PRAM output subroutine. This routine calculates the PRAM values ; based on the current top row (TOPROW) and number of user rows (NMBROW). ; PRAMOUT: MOV AL,TOPROW ; get current top row MOV CL,=NMBCOLS ; get number of columns MUL CL ; calc starting address MOV PRAM1,AL MOV PRAM2,AH ; set start addr, ptn 1 MOV AL,=NMBROWS ; get max row number SUB AL,TOPROW ; calc rows to end of ptn MOV CL,=19 MUL CL ; times line size MOV CL,=4 SHL AX,CL ; adjust field MOV PRAM3,AL MOV PRAM4,AH ; set length, ptn 1 XOR AX,AX MOV PRAM5,AL MOV PRAM6,AH ; set start addr, ptn 2 MOV AL,TOPROW ; get rows to end of ptn MOV CL,=19 MUL CL ; times line size MOV CL,=4 SHL AX,CL ; adjust field MOV PRAM7,AL MOV PRAM8,AH ; set length, ptn 2 CALL GDCFE ; wait for fifo empty MOV BX,&PRAMCMD ; get parameter ram #TITLE "Serial I/O for the NEC-APC" #SUBTTL "Equates and Definitions" #PAGE 132,66 ; ; SIOAPC.A ; Written by: John E. Lauber ; MODULE "SIOAPC" ; module ID ; #INCLUDE "APCEQU" ; common APC equivalences #INCLUDE "DREQUATE" ; common driver  command CALL GDCOUT ; send to device JMP GDCFE ; wait fifo empty and exit ; ; ; GDC command output subroutine. ; On entry: [BX]=length of command,[BX]+1=Commands/Parameters word list. ; GDCOUT: PUSHF ; save flags CLI ; and disable in #TITLE "Screen routine tester" #SUBTTL "Copyright (C) John E. Lauber" #PAGE 132,66 ; MODULE "SCRTST" ; TLINK "X" ; #INCLUDE "EQUATE" ; LOC Code# ; START: MOV CL,=0 CALL SCREEN# ; initialize the screen ; __LOOP: MOV CL,=DCFCN MOequivalences ; ; Bit definition of the status word. ; TXRDY == 1<<0 ; transmitter ready RXRDY == 1<<1 ; receiver ready TXE == 1<<2 ; transmitter empty PE == 1<<3 ; parity error OE == 1<<4 ; overrun error FE == 1<<5 ; framing error SYNterrupts PUSH DX ; save regs MOV AH,[BX] ; load command length INC BX ; bump pointer XOR DH,DH ; clear reg __LOOP: TEST AH,AH ; any bytes left? JZ __X ; if not, exit loop ; __C1: IN AL,CRT_STAT ; read GDC status TEST AL,=FF ; V DL,=0XFF INT OPSYSC OR AL,AL JZ __LOOP MOV CL,AL CMP AL,='~' JZ __EXIT CALL SCREEN# JMPS __LOOP ; __EXIT: RETF ; KBDLOK:: KBDULK:: WAIT:: SIGNAL:: RET ; END START DET == 1<<6 ; sync detect DSR == 1<<7 ; data set ready ; ; Befault configuration of the mode instruction word. ; M8251 == 0X4E ; 1 stop, no parity, 8-bit word, X16 ; ; Bit definition of the command instruction word. ; TXEN == 1<<0 ; transmfifo full? JNZ __C1 ; if so, wait MOV DL,1[BX] ; load port (command or parm) MOV AL,0[BX] ; load value OUT DX,AL ; and send it INC BX INC BX ; bump table pointer DEC AH ; count words down JMPS __LOOP ; and continue loop ; __X:it enable DTR == 1<<1 ; data terminal ready RXE == 1<<2 ; receiver enable SBRK == 1<<3 ; send break ER == 1<<4 ; error reset RTS == 1<<5 ; request to send IR == 1<<6 ; internal reset EH == 1<<7 ; enter hunt mode ; ; Default configura POP DX POPF ; restore interrupt status RET ; else, exit ; ; ; Wait for GDC fifo to empty out. ; GDCFE: IN AL,CRT_STAT ; read GDC status TEST AL,=FE ; fifo empty? JZ GDCFE ; if so, continue loop RET ; else, exit ; ; ; Read a tion of the command instruction word. ; C8251 == RTS|ER|RXE|DTR|TXEN ; refer to above symbols ; #SUBTTL "Driver Data Area" #PAGE ; LOC Data# ; locate in data segment ; FCNTBL == . ; driver function lookup table WORD SERST ; serial statuinput semaphore WORD . WORD .-2 WORD SI0POL ; input poll routine S0BSZ: WORD 64 ; buffer size WORD 0,0,0 ; base, in and out pointers WORD 0 ; output semaphore WORD . WORD .-2 WORD SO0POL ; output poll routine BYTE 0 ; output  ; save index reg MOV DI,&IOTBL ; get I/O table base MOV CX,=NMBSIO ; get number of serial channels __LP: PUSH CX ; save count reg CALL INIT8251 ; initialize the channel MOV DX,STAT[DI] ; get uart status port addr IN AL,DX ; read it s WORD SERIN ; serial input WORD SEROUT ; serial output WORD SERSBR ; serial set baud rate WORD SERRBR ; serial return baud rate WORD SERSMC ; serial set MODEM controls WORD SERRMC ; serial return MODEM controls NMBFCN == (.-FCNTBLchar BYTE 0XAF ; current baud rate S0MODE: BYTE M8251 ; line control value BYTE 0 ; serial channel flags ; ; SIOCH1 == . ; serial channel 1 WORD S1_DATA,S1_STAT ; data and status/command ports WORD S1_RS,S1_WS ; mask/read signal and w AND AL,TBEMSK[DI] ; Check to see if device there CMP AL,TBECP[DI] JNE __C ; if not, continue OR SFLAGS[DI],=UACT ; set uart active flag MOV BX,BUFSIZ[DI] ; get buffer size CALL ALLOC# ; allocate some memory )/2 ; number of valid functions ; LOC 0 ; IOTMOD == . ; I/O table entry model DATA: RES WORD 1 ; uart data port addr STAT: RES WORD 1 ; uart status port addr MSKRS: RES WORD 1 ; uart mask/read signal port addr WSIG: RES WORD 1 ; uart wrrite signal WORD IT_MOD1 ; Timer mode port address WORD IT_CNT1 ; timer port addr WORD 0X36 ; set timer value for mode port BYTE RXRDY,RXRDY ; mask, value BYTE TXRDY,TXRDY ; mask, value WORD 0 ; input semaphoreMOV BUFPNT[DI],BX ; set buffer base address MOV SINPNT[DI],BX ; set buffer input pointer MOV SOTPNT[DI],BX ; set buffer output pointer MOV DX,SINPOL[DI] ; get input poll routine addr CALL LNKPOL# ; and attach to poll list __C: POP CX ; resite signal port addr TMRMOD: RES WORD 1 ; Timer port address TIMER: RES WORD 1 ; timer port addr TMRSET: RES BYTE 1 ; set timer value for mode port RDAMSK: RES BYTE 1 ; receive data available mask RDACP: RES BYTE 1 ; recei WORD . WORD .-2 WORD SI1POL ; serial input poll routine S1BSZ: WORD 64 ; buffer size WORD 0,0,0 ; base, in and out pointers WORD 0 ; output semaphore WORD . WORD .-2 WORD SO1POL ; output poll routine BYTE 0 ; output char Btore the count ADD DI,=IOTLEN ; index to next table entry LOOP __LP ; and loop for number of channels POP DI ; restore index reg RET ; and exit ; INIT8251: MOV DX,MSKRS[DI] ; get uart mask port addr MOV AL,=0X07 ; Set mask for xmit,ve data available ready TBEMSK: RES BYTE 1 ; trans buffer empty mask TBECP: RES BYTE 1 ; trans buffer empty ready SINSPH: RES WORD 3 ; serial input semaphore SINPOL: RES WORD 1 ; serial input poll routine addr BUFSIZ: RES WORD 1 ; serial bufYTE 0XAF ; current baud rate S1MODE: BYTE M8251 ; line control value BYTE 0 ; serial channel flags ; ; STMAP maps the NEC SIO status into the TurboDOS modem status. It ; is assumed that the NEC SIO status has CTS in bit 3, RI in bit 2, ; CD i rcv, ctl OUT DX,AL ; dissable all interrupts CALL DELAY MOV DX,STAT[DI] ; get uart command/mode port addr MOV AL,=0X80 ; get dummy command OUT DX,AL ; send it CALL DELAY OUT DX,AL CALL DELAY fer size BUFPNT: RES WORD 1 ; base of serial input buffer SINPNT: RES WORD 1 ; serial buffer in pointer SOTPNT: RES WORD 1 ; serial buffer out pointer SOTSPH: RES WORD 3 ; serial output semaphore SOTPOL: RES WORD 1 ; serial output poll routin bit 1, and DSR in bit 0. ; STMAP: BYTE 0 ; nothing on BYTE 4 ; DSR BYTE 2 ; CD BYTE 6 ; DSR, CD BYTE 1  MOV AL,=IR ; get internal reset bit OUT DX,AL ; clear device to known state CALL DELAY MOV AL,CURMOD[DI] ; get current operating mode OUT DX,AL ; and send it CALL DELAY MOV AL,=C8251 ; get default command word OUTne addr SOCHAR: RES BYTE 1 ; output char buffer SERBRT: RES BYTE 1 ; current baud rate setting CURMOD: RES BYTE 1 ; current device operating mode SFLAGS: RES BYTE 1 ; serial channel flags IOTLEN == .-IOTMOD ; length of one entry ; ; Bit def ; RI BYTE 5 ; DSR, RI BYTE 3 ; CD, RI BYTE 7 ; DSR, CD, RI BYTE 8 ; CTS BYTE 12  DX,AL ; and send it CALL DELAY MOV DX,WSIG[DI] ; Clear out write signal XOR AL,AL OUT DX,AL ;;; RET ; all done ; ; Delay for a few microseconds. This saves the poor 8251 from beininition of serial channel flag byte. ; UACT == 1<<0 ; uart active flag ; RELOC ; ; Base of serial I/O tables. ; IOTBL == . ; SIOCH0 == . ; serial channel 0 WORD S0_DATA,S0_STAT ; data and status/command ports WORD S0_RS,S0_WS ; mask/re ; CTS, DSR BYTE 10 ; CTS, CD BYTE 14 ; CTS, DSR, CD BYTE 9 ; CTS, RI BYTE 13 ; CTS, DSR, RI BYTE 11 g ; overrun by the big, fast 8086 at init time. God helps those who ; help themselves. (This does not seem necessary for the SIO on ; the main I/O board, but the SIO on the auxilary board gets very ; sick without this!) ; DELAY: MOV CX,=0X10ad signal and write signal WORD IT_MOD0 ; Timer mode port address WORD IT_CNT0 ; timer port addr BYTE 0X76 ; set timer value for mode port BYTE RXRDY,RXRDY ; mask, value BYTE TXRDY,TXRDY ; mask, value WORD 0 ;  ; CTS, CD, RI BYTE 15 ; CTS, CD, RI, CD ; NMBSIO == (.-IOTBL)/IOTLEN ; number of channels supported ; #SUBTTL "Driver Routines" #PAGE ; LOC Code# ; locate in code segment ; SPINIT:: PUSH DI 0 ; This is plenty long LOOP $ RET ; ; ; Driver entry point. ; COMDRV:: SERIAL:: XOR AL,AL ; Setup bad status, in case CMP CH,=NMBSIO ; test for valid channel number JAE __X ;k to poll list MOV BX,&SOTSPH ; get semaphore offset ADD BX,DI ; point to it JMP WAIT# ; and dispatch untill ready ; ; Serial output polling routines. ; SO0POL: WORD 0 WORD 0 ; PUSH DI ; save reg MOV DI,&SIOCH0 ; load channel table__1 ; if not, continue MOV SOTPNT[DI],BX ; flush the buffer __1: INC BX ; bump input pointer MOV AX,BUFPNT[DI] ; get buffer base addr ADD AX,BUFSIZ[DI] ; calc last addr+1 CMP AX,BX ; buffer wrap? JNZ __2 ; if not, continue MOV BX,BU if invalid, continue PUSH DI ; save index reg MOV DI,=IOTBL ; get base of tables MOV AL,=IOTLEN ; get entry length MUL CH ; index as per channel ADD DI,AX ; point to channel's entry TEST SFLAGS[DI],=UACT ; Is this port addr JMPS SOPCOM ; and join common ; SO1POL: WORD 0 WORD 0 ; PUSH DI ; save reg MOV DI,&SIOCH1 ; load channel table addr ; SOPCOM: MOV DX,STAT[DI] ; get uart status port addr IN AL,DX ; read it AND AL,TBEMSK[DI] ; mask it CMP AFPNT[DI] ; else, wrap the buffer __2: MOV AX,SOTPNT[DI] ; get output pointer CMP AX,BX ; buffer full? JZ __X ; if so, exit without signalling MOV [BX],CL ; write char into buffer MOV SINPNT[DI],BX ; update input pointer MOV BX,&SINSPH  actually there ? JZ __X CALL __O ; do the operation POP DI ; restore index reg __X: RET ; all done ; __O: CMP DL,=10 ; function = 10? JZ SEROUT ; if so, continue CMP DL,=NMBFCN ; check for valid function JAE __X ; L,TBECP[DI] ; compare with ready value JNZ __X ; if not ready, continue MOV DX,DATA[DI] ; get uart data port addr MOV AL,SOCHAR[DI] ; get waiting char OUT DX,AL ; and send it MOV BX,SOTPOL[DI] ; get poll routine addr CALL UNLINK# ; an; get semaphore offset addr ADD BX,DI ; point to it CALL SIGNAL# ; signal the char __X: POP DI ; restore reg RET ; and exit ; ; Set serial baut rate entry point. ; SERSBR: MOV SERBRT[DI],CL ; set table variable ; ; Set uPD8253 counteif invalid, continue MOV BL,DL ; move to reg XOR BH,BH ; make double length ADD BX,BX ; times 2 for addr table JMPI FCNTBL[BX] ; execute function ; ; Serial status entry point. ; SERST: CALL CHKBUF ; check the buffer RET ; done ;d remove from poll list MOV BX,&SOTSPH ; get semaphore offset ADD BX,DI ; point to it CALL SIGNAL# ; and signal the event __X: POP DI ; restore index reg RET ; and exit ; ; Check the input buffer. ; CHKBUF: MOV BX,SOTPNT[DI] ; get or routine. ; MOV BL,CL ; get baud rate variable AND BL,=0X0F ; mask to baud rate bits XOR BH,BH ; make double length ADD BX,BX ; times 2 for table lookup CS MOV BX,BRTBL[BX] ; load timer constant MOV DX,TMRMOD[DI] ; get timer mo ; Serial input entry point. ; SERIN: MOV BX,&SINSPH ; get input semaphore offset ADD BX,DI ; point to it CALL WAIT# ; dispatch if neccessary CALL CHKBUF ; check the buffer OR AL,AL ; set flags JZ SERIN ; if false alarm, try again utput pointer MOV AX,SINPNT[DI] ; and input pointer SUB AX,BX ; compare the values JZ __X ; if equal, continue INC BX ; bump the pointer MOV AX,BUFPNT[DI] ; get buffer base addr ADD AX,BUFSIZ[DI] ; point to last addr+1 CMP AX,BX ; de set reg MOV AL,TMRSET[DI] ; get timer set value OUT DX,AL ; and send it MOV DX,TIMER[DI] ; get timer port addr MOV AL,BL ; get LSB of count OUT DX,AL ; send it MOV AL,BH ; get MSB of count OUT DX,AL ; send it RET ; all don MOV SOTPNT[DI],BX ; update output pointer MOV AL,CL ; input char to reg RET ; done ; ; Serial output entry point. ; SEROUT: MOV BX,DX ; Save function code TEST SERBRT[DI],=0X40 ; Should we wait for CTbuffer wrap? JNZ __1 ; if not, continue MOV BX,BUFPNT[DI] ; else, wrap the buffer __1: MOV CL,[BX] ; get the char OR AL,=0XFF ; set ready status __X: RET ; done ; ; Serial input polling routines. ; SI0POL: WORD 0 WORD 0 ; PUSH DI e ; ; Baud rate divisor constants table. ; BRTBL: WORD 3072 ; 50 baud WORD 2048 ; 75 baud WORD 1396 ; 110 baud WORD 1142 ; 134.5 baud WORD 1024 ; 150 baud WORD 512 ; 300 baud WORD 256 ; 600 baud WORD 128 ; 1S? JZ __1 MOV DX,MSKRS[DI] ; Yes, check real CTS value IN AL,DX TEST AL,=4 ; Is CTS on ? JZ __2 __1: MOV DX,STAT[DI] ; get uart status port addr IN AL,DX  ; save reg MOV DI,=SIOCH0 ; load table addr JMPS SIPCOM ; and join common code ; SI1POL: WORD 0 WORD 0 ; PUSH DI ; save reg MOV DI,=SIOCH1 ; load table addr ; SIPCOM: MOV DX,STAT[DI] ; get uart status port addr IN AL,DX ; read i200 baud WORD 85 ; 1800 baud WORD 76 ; 2000 baud WORD 64 ; 2400 baud WORD 42 ; 3600 baud WORD 32 ; 4800 baud WORD 21 ; 7200 baud WORD 16 ; 9600 baud WORD 8 ; 19200 baud ; ; Return serial baud rate entry point. ; S; and read it AND AL,TBEMSK[DI] ; mask status CMP AL,TBECP[DI] ; check ready value JNZ __2 ; if not ready, continue MOV DX,DATA[DI] ; get uart data port addr MOV AL,CL ; get output char OUT DX,AL ; and send it OR AL,=0XFF ; set goodt AND AL,RDAMSK[DI] ; mask it CMP AL,RDACP[DI] ; compare to ready value JNZ __X ; if not ready, continue MOV DX,DATA[DI] ; get uart data port addr IN AL,DX ; read the data MOV CL,AL ; hold in reg TEST SERBRT[DI],=1<<5 ; transmit onlyERRBR: MOV AL,SERBRT[DI] ; get current setting RET ; all done ; ; Set MODEM controls entry point. ; SERSMC: MOV DX,STAT[DI] ; get uart status port addr MOV AL,=C8251 ; get current uart mode setting AND AL,=~(DTR|RTS) ; clear current b status __X: RET ; and exit ; __2: MOV AL,=10 ; load constant SUB AL,BL ; function = 10? JZ __X ; if so, exit with AL=0 MOV SOCHAR[DI],CL ; save output char MOV DX,SOTPOL[DI] ; get output poll routine addr CALL LNKPOL# ; and attac device? JNZ __X ; if so, just eat the char MOV BX,SINPNT[DI] ; get buffer input pointer TEST SERBRT[DI],=1<<7 ; attention char enabled? JZ __1 ; if not, continue AND CL,=0X7F ; strip parity bit CMP CL,ATNCHR# ; attention request? JNZ  its TEST CL,=1<<7 ; RTS flaged? JZ __1 ; if not, continue OR AL,=RTS ; set RTS bit __1: TEST CL,=1<<6 ; DTR flaged? JZ __2 ; if not, continue OR AL,=DTR ; set DTR bit __2: OUT DX,AL ; update the uart RET ; all done ; ; Return MOV CL,=05 MOV CH,=00 CALL COMDRV# ; initialize baud rate MOV DL,=00 ; get input status MOV CH,=00 CALL COMDRV# MOV DL,=04  MODEM controls entry point. ; SERRMC: MOV DX,STAT[DI] ; get uart status port addr IN AL,DX ; read it SHL AL,=1 ; Save DSR bit in carry MOV DX,MSKRS[DI] ; Get auxilary status IN AL ; get baud rate MOV CH,=00 CALL COMDRV# __1: MOV DL,=02 ; output character MOV CH,=00 MOV CL,=64 CALL COMDRV# JMP __1 ; ALLOC:: LEA BX,B,DX RCL AL,=1 ; Shift DSR into low bit AND AL,=0X0F ; Kill insigificant bits LEA BX,STMAP ; Get status for TDos XLAT RET ; END UF LNKPOL:: UNLINK:: WAIT:: SIGNAL:: RET ; END START  #TITLE "Sign-on Message Area" #SUBTTL "For the NEC-APC" ; ; SOMIPC.A ; MODULE "SOMAPC" ; module ID ; #INCLUDE "EQUATE" ; oommon OS equivalences ; LOC Data# ; locate in data segment ; USRSOM:: #REPEAT 6 ; allocate 60 user bytes BYT #TITLE "Serial port driver tester" #PAGE 132,66 ; MODULE "SIOTST" ; TLINK "X" ; #INCLUDE "EQUATE" ; LOC Code# START: MOV CL,=37 MOV DX,=15 INT 223 MOV CL,=38 MOV DX,=0 INT E 0,0,0,0,0,0,0,0,0,0 #ENDREP ; ; BYTE ACR,ALF ; BYTE "System Memory Size = " MEMKSZ: BYTE 0,0,0,0 ; range = 64-610k ; ; BYTE ACR,ALF ; BYTE "Circuit: " CKTNO: BYTE 0,0,0 ; range = 0-255 ; ; BYTE ", Node: " NODNO: BYTE 0,0,0 ; range = 0- #TITLE "Serial port driver tester" #PAGE 132,66 ; MODULE "SIOTST" ; TLINK "X" ; #INCLUDE "EQUATE" LOC Data# BUF: RES WORD 32 ATNCHR::BYTE 3 ; LOC Code# ; START: CALL SPINIT# MOV DL,=03  223 __1: MOV CL,=35 MOV DX,=00 INT 223 MOV DL,AL MOV CL,=36 MOV DH,=00 INT 223 JMP __1 ; ; END START  255 ; BYTE "$" ; LOC Code# ; locate in code segment ; ; Routines to patch system sign on message. ; PTMKSZ:: PUSH DI ; save reg MOV DI,&MEMKSZ ; get msg offset CALL DECMSG ; do common code MOV [DI],='k' ; append kilobyte char PO INT OPSYSC POP DX POP CX POP BX TEST AL,AL JZ __X CMP AL,='C'-0X40 JZ __SIG CMP AL,=AESC JZ __SIG XOR AL,AL __X: RET ; __SIG: OR AL,=0XFF RET ; RET ; END START P DI ; restore reg RET ; and exit ; PTMCKT:: PUSH DI ; save reg MOV DI,&CKTNO ; get msg offset XOR AH,AH ; make double length CALL DECMSG ; do common code POP DI ; restore reg RET ; and exit ; PTMNOD:: PUSH DI ; save reg MOV DI,&NODNO ; get msg offset XOR AH,AH ; make double length CALL DECMSG ; do common code POP DI ; restore reg RET ; and exit ; DECMSG: XOR BL,BL ; clear zero print flag MOV CX,=100 CALL __DM ; write 100's digit MOV CX,=10 CALL __DM ; write 10's digit MOV CX,=1 OR BL,=0XFF ; set zero print flag __DM: XOR DX,DX ; clear remainder register DIV CX ; divide the number OR AL,AL ; did it go? JNZ __1 ; if not, continue OR BL,BL ; zero print enabled?  JZ __X ; if not, continue __1: ADD AL,='0' ; add ASCII bias MOV [DI],AL ; move to message area INC DI ; bump pointer OR BL,=0XFF ; set zero print flag __X: XCHG AX,DX ; swap remainder with quotient RET ; all done ; END CON192DataACodeSERIALDMSCONBRFFCHRCONDR_ `u ,t*t&`RQ`` t YQYZ ES WORD 1 ;PHYSICAL TRACKS PER DISK RESTRK: RES WORD 1 #TITLE "TEST PATTERN" MODULE "TSTPTN" ; #INCLUDE "EQUATE" ; LOC Data# ; COLOR: BYTE 0 ; LOC Code# ; ; START: MOV AL,=ASUB CALL CHROUT ; __CLP: MOV AL,=AESC CALL CHROUT MOV AL,='C' CALL CHROUT MOV AL,COLOR INC AL AND AL,=7  MOV COLOR,AL ADD AL,='1' CALL CHROUT ; MOV AL,='.' MOV CX,=(26*80)-1 __FLP: CALL CHROUT ; fill screen loop LOOP __FLP CALL BREAK JNZ EXIT MOV AL,='^'-0X40 CALL CHROUT JMPS __CLP ; EXIT: RETF ; DMSBX: MOV AL,[BX] INC BX TEST AL,AL JZ __X CALL CHROUT JMPS DMSBX __X: RET ; CHROUT: PUSH AX PUSH BX PUSH CX PUSH DX MOV DL,AL MOV CL,=DCFCN INT OPSYSC POP DX POP CX POP BX POP AX RET ; BREAK: PUSH BX PUSH CX PUSH DX MOV DL,=0XFF MOV CL,=DCFCN SCREENXS [.Ct S[FFCHRCONDR_ `u ,t*t&CPMSUPOriginUnitDataCodeXTNTRYIOBYTERIBFCNSIBFCNRLIFCN.WPDFCN<RROFCN\DPBFCNRDFCNRSNFCN`DOÊDU`ú  RS[tZy\OÊTiDCON96DataACodeSERIALDMSCONBRFFCHRCONDR_ `u ,t*t&`RQ`` t YQYZ RES WORD 1 ;PHYSICAL TRACKS PER DISK RESTRK: RES WORD 1Oú  RS[tZy\OÊTi xڻ`\O\_QSTiK[$PG0ug̀ẗgWʶXuJW uW G XG Ë\U s RS [ZyË\UD] &C HDCAPCDataCodeWAITSIGNALDSKDRXDSKDR_ a a     hP B 2"@? 2"@? 2"@? 2"@? cBMXce]dD{Z W 䓈䓆;`DSKFMTDataDSTBLS XLTBLDTCO TYPCODGAPLEN` h#M5`" # P?5`3 # (5`D 4#M 5`U #P;5`f #(5`w 4#M` #u-0械0橰01   `'`(S`)`!` @x< `" 4y`' `" #`'xYQ`  [Î` ߈0 1W&< ERuL&| MAuD&| P u<` 0㋟`nC1ҹ  DSKAPC>DataCodeWAITSIGNALDSTBLSDTCOCONOUTLNKPOL XLTBL TYPCOD UNLINK3FLSRT_DSKIN_#DSKDR_ a a  5!dCLGPtM` #` #@` "4M`   "M`          #&),/2!$'*-03"%(+.1u&sGG&;`r `  BX)LJ&WV`` u V ^` u P`X^_ÊÀr00`v 4 y 0㋟`n \0 `` xñDD= @r-  41)э`2GWD9ȉG` `3б C&  û` P`XÊr00`4 ^u`0 `tJ ` t `0x? ݈„u`<w R Zt`8`tu \ 0  uDu 4GDGsG D G D G V .u&[D+GtL DD ؉DDS  [ÊT D& GG&;r@ƀ:` u ;`u:6`tG TxH6`` `6`#6`&`$`)` t |u| t`)`  @`DtCD$CDCD$`/D P XD D:  Dt@  M`$t`/z `1`1 t`1 1t@tʀ`2D`*D `+D`)\`0` |x 0à ` `PSR >x8Z[SR`&``&`!`!`` t`x ` Z[X`t`&`)`)` y 0` ^`" t`x` }` v W`|L``t``(`0 u G`*  t0ӊŠt t` '` 8s (``6``/ b.`2 ( j`$t%`u`t `0x `/zŠ``( @t M`+\ `\ u ،Žڎs_``à` #0  `   Q  Y0 0/@ 䢨 tCI       䢨uCP䖨tX$t  G  `*`)t T`($t ËD P X`+   uDH:`1 ÊD<sPt e t 0ÊT` $8t0` `$ӊ`$` ` `&` &`ù  : |0` ÊD:` t `   au 䖨t x䒨t m h䢨u _ X䖨t W>`* B 9 4 䢨 t䠪 $ 䢨u`*$`<@_! 0L.`tù   ?`ñ K` $Pu` $< u`Pt@u R/CuÜ`Pt@tRCú``\ `Ë\ `QL Y! ((t r ` `Pu  c ` $`t`À>`t`` J$tH`(L$/Nt@tʀH <^r `/?;:'"^!HH`` LSTETX4DataCodeSERIALETXBRETXLENETXSEQETXFFLSTDR_ `$ uRQ`YZ<t <tÊ` Y:`r S uQ : .$,u 6 Y$<u -`  LSTCTSData2CodeSERIALCTSBRCTSFFLSTDR_n `ÊuRQ`YZ<t <tÊ`1 ;PHYSICAL SECTORS PER TRACK TRKDSK: RES WORD 1 ;PHYSICAL TRACKS PER DISK RESTRK: RES WORD 1  yQRQRZYû``PXGTH ; RELOC ;RESTORE PREVIOUS LOCATION ; #RELIST ;RESLSTAPC Data%CodeLNKPOLWAITUNLINKSIGNALPPACHLSTDRLSTDR_ a`u`nnlQ Ynttà`P Xu`uñ $tM< si< t< t < t*< t8<tM<u/ v r0``ñ `t X``2r` ` ` w ` n p` À>`t`u``` F``yñ  >`u`0Z΀PrO:` r:` v` `t  uƀPr)0>`u `@t IO:` v ` ZY[X #RELIST ; restore listing status t` `t O u` >` r`  ]R ZÈ0`` (r ` ``õP ,rΊ` {``À1rwȱ&`` À r8`  1҉` vPH`&`` ` ` d` &`` @ P(Ȣ`&`` ` ` .` ` R 0€rZ /`&``  `&`` r ` f ` rP0à` P`&`*` `&`1`&`` `&` *`  !R'C0t@uWCCZ@t@t@XSCRTSTCodeSCREENKBDLOKKBDULKWAITSIGNALt<~t RDSCRAPCData1CodeWAITSIGNALTABSIZCURSORSLFLAGSCREENCSRCHKCSRENA! a  ia"=*TYCd(Y"B@N@R@@@@@E@oBFB@GBP@JB@@pB@@@@@RTCNULOriginUnitDataVCodeLNKPOLDLYTICSETDRFRTCNITSETDR1%SETDR2`!`uð u0LSTUt$ttt us `` t`@@@@@@@@@@@KB@!@@IB@@ B@@0B@B pB@@@@@@@@LB@@@VWQ`Y ` _^؎`uQ`B  < `Y`&`` ``` u s`ȹ u )` 0.` / E U/ tvUL@* E(ËUE)$t @t ËU 0t XSIOTST Code% ߱& ߱# ߈±$ CTRL) USRFCN == BYTE 41 ;FUNCTION 41 (USER DEFINED) RDXSIOTSTAData+CodeSPINITCOMDRV@ATNCHR&ALLOC*LNKPOL*UNLINK*WAIT*SIGNAL@@ ` LISTING STATUS SIOAPCeDataCodeALLOCLNKPOLWAITUNLINKSIGNALATNCHRSPINITKCOMDRVKSERIALfsw$0246+v a` $@a//`N%0246- aKK`*$@a[[`NW` Q )U8uM*] ]]]UY+_ËU0U@E)7ÀsW`+ _À t(s0` û  t]Àe eE(@tM MRUZ"E :Eu ð (tM'U% !W`!W`9U"E :EuE']% _Ë]E)tCEE9u] !W`!W`9U"E :E uBE( u7]E(t :`u]CEE9u]E9t ] _ÈM(]( `` `Uá`É`0?LDRMSGOriginUnit]CodeLDRDMSMSG001,MSG002;MSG003LMSG004Fatal error loading O/S: to retry not found, bad memory loading at OSNTRYOriginUnitDataCLOFCNCIFCNCOFCNRCIFCNRCOFCNLOFCNDCFCN RIBFCN SIBFCN PBFCN CIBFCN CSFCNRVNFCNRDSFCNSELFCNOFFCNCFFCNSFFFCNSNFFCNDFFCNRSFFCNWSFFCNMFFCNRFFCNRLIFCNRCDFCNSDFCNWPDFCNRROFCNSFAFCN DPBFCN!SRUFCN"RRFFCN#WRFFCN$CFSFCN%SRRFCN&RDFCN'LKRFC8DOSLOADOriginUnitData|CodeRESUMEOTNTRYOCNTRYMSG001MSG002TSTUND USRSOM MSG004 MSG003 EndData HDWNITCRPROCDSKNITBMINITLOADFN SCANDNLODSN(FRRFCN)SSCFCN*DFSFCN+CHNFCN,SDBFCN-RDBFCN.RRMFCN/RAMFCN0ARMFCN1AAMFCN2FMSFCN3FAMFCN4PLFCN5DT1FCN6DT2FCN7RSNFCN8SRCFCN9SRTFCN:PBCFCN;PBLFCN<ROSFCNSOMAPCGDataLCodeUSRSOMPTMKSZ PTMCKTPTMNOD$W`< k_W`@0 _W`C0 _0۹ d  1ut0GEG9SYSDATLDRDMSnALLOCyDEALOC OSMASTERSYS" @COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 03/29/84) ".`9Ȏ؎м` Dg`C  Or o.`.`=`y=CTPFCN>DPFCN?AMFCN@DMFCNASMFCNBRMFCNCSESFCNDSERFCNESDTFCNFRDTFCNGRDMFCNHROUFCNISCFFCNJLOGFCNKLFFCNLADFFCNMALDFCNNSCLFCNORAVFCNPRDPFCNQSRSFCNRPDAFCN..`; RZy |  s <t< u 0 뫉&` ``uW` t± }u 1  sK &` `u:` ty<r  w  VSSBPFCNTRBPFCNULFDFCNVFFBFCNWSRPFCNXEOPFCNYSRDFCNZQPFFCN[FLBFCN\RCFCN]CCSFCN^CCIFCN_CCOFCN`SCBFCNaRCBFCNbSMCFCNcRMCFCNdEXTFCNeRDDFCN;fCodegDISDSPhSET -u  ðú`?V`` ؎ t \`< t < t ^  Copyright 1984, Software 2000, Inc. t(RS [([ R/[ I) `tڱ  4 DR1iCKATTNjENADSPkGETSDSlGETWSBmNETREQnPFNFCNoDT3FCNpMPMFCNqTSTUNDfOCNTRY fOTNTRY#fXCNTRY0fXTNTRYfERRXIT``````` ` ` ` ` ````` `  #: S [r.`&&:uC  ] r ,û` uڱ3`7`uû``)0` C``ú`à`y``````````` ``` `!`"`#`$`%`&`!#` '`(`)` *`+`",`-`.`/`0`1`2`3`4`5`6` 7`8` 9`:`;`<`=`>`A :`   q.  C$? u    tOtQtStUtWtYt[t]t_ i <D_D]D[DYDWDUDSDQDO t ËdaDO DetPjD_t]l[|YtWTULS\QDO t^kVlƉ\QLSTUDW|Yl[D]D_DO mrKDSS t[ur t! P uňts0P"Xtj AQ  YDOuDj Dj uM#uI &:rGETXDR?CALCBV@CKOPNDACKDRVLBDSKMGRCCKDRODGETLSAEZERODNFALVNITGADVDNOHCLSFPICRFCBPJGETDLSKFNDNDEL `&CBRSBC ؋l][Z0&ti _tS\UD] guQ T uG DrB YS؎ K[u4S ˉڋ\UˋD]&&g[:G rg P&'0PX & tƄ Í DnCڋ\UC D]\s  urtQ DoY uԋ\K D$ (Ј E ut >T 3u Ts( `u.` `` u؎ڱ3ډӉ\ 7 \C뻊D\T0)s؎ otD  ttDx\ÊD$¶` Ӌu%S *uD t``t bu`t` u`0ú`،ݹ `!`'`t `; @ÊDUu`À&`SGLUSROriginUnitDataoCodeCKDOSTCKCBSTDSPINPDSPFCBCALCBVOSNTRYOriginUnitDataCLOFCNCIFCNCOFCNRCIFCNRCOFCNLOFCNDCFCN RIBFCN SIBFCN PBFCN CIBFCN CSFCNRVNFCNRDSFCNSELFCNOFFCNCFFCNSFFFCN`R /[CuC`  x` ` u ``'< u `/< u CCMCD`,`2`5t`3 `& t `&; @u ` ` `F   " 6t !t`F DSKAST OTNTRYWSRESCIRES`ut -` ` sS` ˋ ![yӺ `S`[uRPs S [XZyAUTLOGOriginUnitDSNFFCNDFFCNRSFFCNWSFFCNMFFCNRFFCNRLIFCNRCDFCNSDFCNWPDFCNRROFCNSFAFCN DPBFCN!SRUFCN"RRFFCN#WRFFCN$CFSFCN%SRRFCN&RDFCN'LKRFCN(FRRFCN)SSCFCN &t t`V `k` " rڈCځ`r  sK`j`j ػ`F.` \  `&x``5t `3 K`` s  `N`&u#`tDPFCN?A`& ` `R Z8tHR Z8t< ``R ` Z ` G rS< s @P^ bX ^[û`& ،` eC`Ë`Kt۠` :tԊ<;à` :tNJtCCGETTOS WSRESCALCBVXFRLDSNDMSGGETFDDSKASTLDIRPTRASTQUEASTDSPINPDSPFCBDSPNIT+SRDFCNQPFFCN " D cFFJJ  uQ SMFCN@DMFCNASMFCNBRMFCNCSESFCNDSERFCNESDTFCNFRDTFCNGRDMFCNHROUFCNISCFFCNJLOGFCNKLFFCNLADFFCNMALDFCNNSCLFCNORAVFCNPRDPFCNQSRSFCNRPDAFCNSSBPFCNTRBPFCNu ` ð  >` u±>`u  0DS \UD]&&_S [` TDU &< uCڻ`S Q[  rEtu) r:t"<.tG<:tK`  r#t6u ru+< u r uJ ZS``Q[Y u*QS  S0CC ڈC7CC7CZ[WYyQ`Uڱ3 y `$ʻ` ˊt S  [t0ӈ  G tS  !ÊCDnE[ sULFDFCNVFFBFCNWSRPFCNXEOPFCNYSRDFCNZQPFFCN[FLBFCN\RCFCN]CCSFCN^CCIFCN_CCOFCN`SCBFCNaRCBFCNbSMCFCNcRMCFCNdEXTFCNeRDDFCN;fCodegDISDSPhSETDR1iCKATTNjENADS ،[[ \Oð(t`C<0r<:s<,0Ġ`%t`%Q`#rrrrr< s `#Yt$Y`?`@`A`B`C`` d st  ]tO et tC Q Yu-S`C` CtCڋ` ،Z`0``  tË``Ë` à`:u`AUTLODOriginUnit<DT h tDOËTU`4˃u tt$S @DOÈ?` DVt'RSDU@  tOtQtStUtWtYt[t]t_ i <D_D]D[DYDWDUDSDQDO t ËdaDO DetPjD_t]l[|YtWTULS\QDO t^kVlƉ\QLSTUDW|Yl[D]D_DO mrKDS u`<+%GETXDR?CALCBV@CKOPNDACKDRVLBDSKMGRCCKDRODGETLSAEZERODNFALVNITGADVDNOHCLSFPICRFCBPJGETDLSKFNDNDELFNDDDEROVECTOUD] Ur PXDOu [uK1CTUBD] '<r<r &tBC t & G  8uP"X (tj2 AQ YDOu \3Dj rt u{$* GETEXMX GETMMBUPDCOMCLSEXTKSRHNIT FNDDEC CHKHDSFNDNDE ADVDNOCGETDEA GETDLSRDRECCRDRECGETBLKWRRECCWRRECI GETBLMCHKALVGETABAU GETNABqCLROTEFFFCN OPNFIL~CFFCNCLSFILSFFFCNSNFFCNDFFCNDELFILRSFFCNWSFFCNMFFCNRFFCN CQMCOMSFAFCN CKLEXT$RDRAND)RRFFCNjWRRANDoWRFFCNCKLERRCFSFCNSRRFCN%DO ;tj &GP&wS AQ YDOu [&GX&GDj Sr+tt 'u$4u )*u$DOÈDO  &, &5 & t &LOADC,SELFCBLSELDSKRESBIT ZERODNALVNIT# GETLSA GETAVL SAVEDM GETABN OSMCOM __SDNO "&*.2DIRDSK 0 rv\UD] 9 uk -td|ouLFFCNRAVFCN?RDPFCN[SRSFCNRDMFCNRDDFCN  DOult# JtEuVu4\UD]&G t'u &uS G [&0 tDnt C&$K&C&C&$&C$&:rB&&:u CC&*t Q YuQ$Y, &/CC&05& ,& ÁDj 6 uDO u 0   DnP Zu  \ Cu{ ڊDn& t0ڈCڋ\UC D]&C$ڈC0CB&ڈC0 C&P  X:G rG G  &0PX t4t,Q | Yu  u u 0PXÈ & u P uXDOu: &@t1&&Gt'&gQYt DnP tDn  XDn0ËDUDz -t yËDzDUD|DoD~Dq uDOS\UD]&$`t)r(WS[Z0&ti _tS\UD] guQ T uG DrB YS؎ K[u4S ˉڋ\UˋD]&&g[:G rg P&'0PX & tƄ Í DnCڋ\UC D]\s T 3u Ts( au ؋` Q ` EY[ Ìػ`&.`/ 0`/? H`& Gt'Q`V W@u¹ `X`ZS [Y͸ DO= ATNBEL `DOMGROriginUnit DataCodeXCNTRYSETCBFUNLINKSAVCLBLDIRCLRCLB LNKBEG ALLOC DEALOCDOCONIADFFCNoCKDOSTa!`u닜 S Cڻ` ، Dht@GRtjtl @Dj\ltzt|t~LnQ`DnYLnD~D|DzDlDj[t v G ڊLnQ`Dn YLnYu3  *È)u3 @to t%    'ta>`1rZ`#tS`#`%`!u? u: `&t.SP WX G[GS_&[` DlDj|OuQrTtjtl PDj llQ XUHP$ X@Q 1 Ƅ @FCtjtl\j\lTn R`DnƄ `ZTn DlDj`tG*Ê< t<u t `` `  ËDUu Dn`uW`t W` P Pu:` %u Dh  t  @u , - JLh  @u  t  utjtl @Dj\lthα DlDj tO(tCtjtl @Dj\lLn QƄ `Dn YLDlY]X DlDjU a&]Y ú` $`&ú`V9NONFILOriginUnitDataCodeCOMPATCLSAFPFREDRVXTNTRYUnitOrigin USRFCNCPMVERROSFCN Au+` ڌ݋\UD] ` G G ڱt DOÃ`  # `t `S 1[   `t  `t4 / SDnP`DnڱXDn  n DlDjQLnQ`Dn YLnYuxϊ`ˀ  Ë *tË t DŽ!Ë t DŽ!SPLMSGOriginUnit\CodeDMSCONSOCONSTCONINICONSISMLENOSMTOPMEMNITSAMFCN`ALLOCDMFCNDEALOCeRRMFCNpRAMFCN{ARMFCNAAMFCN%FMSFCNFAMFCNlINCMOBqDECMOB!a%` 6```>`tCodeGETSDSENASUBWARMSTMEMNITHDWNITRCDNIT LCLNIT DSPNIT BFLNIT NETNIT SVCNITDSKNITBMINITRESUME@SYSDSKSYSDATSYSNIT@ .&`t UPRCASSPLERRSpooler error (Ignore, Abort) tPX`"(` t`DSPCHROriginUnitVDataOCodeXTNTRY  tt`)G`j ڰDODS tDOËG+GG)GAOڋ+G7wG)OS`P`ڻ` X`[Gڻ`>  /DS TUT]`> Gt ;r9r DOà`PG` >``DEALOCALLOCLNKENDUNLINKLNKBEG GETSDSTICCNTRDYSPHCTPFCN3CRPROCCGETWSBwSMFCN}SNDMSG SIGNALRMFCNRCVMSGWAITLNKPOLISRXITSETDRFDISDSPDSPIFR`ju(`> Gt`:Gs SQ LY[G X` o rKOGG`7wG)OSڻ`> ^[G `P`ڻ` BX`DOX`û`> $` ```RQ` YZù (C` ENADSPDPFCNDELAYRESUMEDLYTIC<GETTOSJSETDDF"a c T` TUt \Q &DOñ *P`U@؎м`T` [ SR [ZYu5QS [C[`TGN`TYOD t/`:Gu2G;tG;u  )ËGGá`u`⻋`t`GڋOډOU ]``f`  uډ wr0G+Gs/>`t؀>``u;`s``⺠``t>`` Y Y GF_HW3R` [0ËTQ\US[ \U \Q q_û`PV `U@u  D7@u DL` b %^Xπd7D7@tL7L7@  D7ud7À`U`UuÀ&`U`x0\Ut\8` u` û`>`f `:Gs rtËGtڋ+rPG++GXr9  ڕ\UD]`fݹ ``COMSUBOriginUnitDataCodeCONOUTSYSDATUndData\L`U@D:\T@lB|DdFTHDJ؎м`T&`U t`` t 7G[`U u# ƻ` \Lx` `U `t ƎDJTHdF|DlBT@L>\}t F.>uP6xNP6xqN"PP%F. uFP ~u~u~u ~r~v5FzIP) tH]NP) tH@UP) t>Hu\HHyl]_^VWU~v ^ W =t5 t0 uN ~G +NF.>5P6xTNF.>E*FF tP6x*NFtP6xNFtP6xNF.>E*P6xM =t=tF.>E*$  P6xM =wF.>}tPu˃ |N ~Gƈu;~t+]_^VWU>u-PP-Fv J;|9v 6xDv kJ+-PVAP6xD=-PV"P6xD-PPv P6xD.]_^VWU6IHx9Copyright 1984, Software 2000, Inc. (Version 01-May-84) &؎м$t$+*+[܋G&VWUv vB6xgM P6xYMuO]_^VWU66666"P M >u]PPeRFdPvL>t&cPu uo Pv6xLnFrvLiF}vLcP, uMv6xL>F6vfLcP u>F>6IHFF;F~vv>u>=u >=t*+P$.6x PxW뽋]_^VWU>t[>t.FF~}t~5~uP6xC5~5P6xC >=u >=t PJPLUcPBUp>u-! +PK]_^VWU~} P'+NtSF v <=-u~ @PPYڀ>u~ 5P$Z>u ~ 5 P먀>u PAPA }P(B }6v6x^L t=t¸cP u ]_^VWU?lP u696vB686tB>xt 6xvB68]_^VWUPPA tPPA=u P ]_^VWU6{86tPv u+F~P]_^VWU6HF~~FN~O>= uFFF;F}6x>PxWً>=t P+FPP]_^VWU-FN~t!>=t6x>PxWҋ]_^VWUFN t6xv xW]_^VWUAPA }PAF }FPbB~=uPNB~=u PPB~=uFvvv6BPP,YPA~=u PP6B~=uFvv662BPPX]_^VWUt>>t76tA>狅zt>狅>狅 듃~t+xFPI3 u>tdNP. u> |a>确>硰>tOFPl#~u ~u~tFP6 tPP6>u>~6x PxW]_^VWU졞;F>ud]_^VWU>tOcP t)6x PxW=PPU6x 6x PxW]_^VWU>xuP6&9x u PFF~}6x PxW<tF;Fu+]_^VWU+-؋ʋÉFF+6.PQ>u PPQ>u P6?PPBPAJt u PxcP/ tlP u06c?PPA~t+P=. tW>uPP> ~>tlc t=tWP- t8>u= |.>狅>狅>t$P- u<> |,EFPC"~t</->u> t/>tPP6xBA PP6x0A>tPP6xA6P6x@.]_^VWUP@v@6-P%7]_^VWU +VA)FP% u5FP( PIv u PfBU]_^VWUFF~r4vPFn~uF)F݋FFvQFFƋF]_^VWU6>6t%O++P'5>u7P>> >tzP{6 } >狅P6 } >狅 P17FP7F~=tvLPv66y7PPN65NPP7P"@t uBPPPV>狅>狅 >狅uFP( t'~}:u+FFPVPEeP tHFPU( uFPD( t&~}:u+FFPVP#FP# t FP t)>tP5Q6=bƒ>t>zG]_^VWUPP6=+P666tL=u P+HCi=PD4P54>uDP t6>txPzt6I5hP;, u> |oPP}>6t~E FP ~u ~u~tFP14 tPP~uPPF>FP+ t^>uO= |>+>Vt*NPvVP(' t P+P]_^VWUNP">Vu ' u P+FP~t>t+PVPFPm)N{PP>PP56mFFmPoPoFPJF@u P\>Nj u>t  6<nC>t>zF]_^VWUsP tj4PO+FH;~IVUPO@G;>}ދ. P. PT ~WVɸZPO]_^VWUF.F .FFN tP> 6tuv/ tFP~t PP~=TuP P*LPP* u^/ u!>u xP( tlFPN~u~u ~u~s# FFm4FP* t x PP FPNP!]_^VWUPFP!& uP+DFPF* *H=wFP * tx ~tf PP&FFPPa!FPNPS!]_^VWUFPP4!FP !t T PP"'~t&~u+ PY'+PFP%~u+ P3']_^VWU uFP ~t( uP+FP ~t~t(PP~vFPv&$]_^VWU? u'FPK F*H=wT^VWU  uP+TFPF*H=w~u*FPF* H=w~t f PP"v PFPPFP]_^VWUo uP+FPxF* PP`H=wvFPP]_^VWUFPNP!]_^VWU% tFP~tPP~t PPA PPXB]_^VWUP % tXP* PPPQ H=w>tf PPUP" PP2 ]_^VWU u P+FP F* =t=t~t~tF:FuF*F* ljF u' PP~t~uFF*F~u+F~u+F~u4~u.~u(~tF F F P%v~tF>FF@~t%~u  uP+1FPF* H=w~tf PPGF+FF;u ~~}PPFvv]_^VWUt u F P@FPy~t ~t ~tf PPQvvI]_^VWUFS % uFPF*`F"~u+PFP,ƀ~t=t=t벾F*O tFP. PP=w u]_^VWUs$ uP+0FP|FP' tx ~u~t PPL,~uFS ~FP u~ ~|+FH=w\vFP~~t FP"~t ~u+PFP#]~uvFP~tF F%~u(vFP~tF F P'"& PP]]_^VWU 0 uP+FP9 F uP+4FP~t ~t ~tf ~vPP!~uvF Pv]_^VWU uFP~t/t uP+$FP}~u ~u~v PPY"PPFPD+PFP7uSF]_^VWUtN]_^VWU# u FP~t&~t # u P+FP~u ~t~tF:FuF*F* ljF u' PPr~t~uFF*F~u+F~u~uF * PP!hH=wl~u PP~u+F~t~uF @ FP $vFPF Pq!]_^VWU u P+cFP p t~tNF*H=wt~u PP[~u+FvFPF P ]_^VWU u%FP~u~tZ uP+OFP~t ~t0vFPbP1PՃ u2PsՃ u PP]_^VWUn u,FPz~u ~uFt#@ uP+FPIF* PP1 FP|,~u&~u ~u~uF PT,P~u)~u#~u~uF P(,PF~u~t~u vFP^~t~u~u vFP@~t~u~uvFPF ~u"~t~uvFPF P)@~t~u&~u ~u~tAFP  uFPFPFPFP7F* H=w|~t ~tWFP ~tdw~uFP$ u~ ~|+FvFPF iP+ ~u+PFP[!1P݃ u2P݃ u PP-H=wF%PFPF% FP]_^VWU v>FP  t FPW]_^VWUv]_^VWUv1Piԃ u2P[ԃ u PP]_^VWUFFF~=t~P~` ` >`=t&6`v+PFPF P(vFP* & PP]_^VWU ! u P+FP~t ~u ~u ~u~F  ~uF P FP*~u}~uFP$ u~ ~|+FF hP*~u+PFP=)1P/]_^VWUvn" Pd"]_^VWU u P++FPF* H=w~u PP t FPFFF~u+F~u~u~uvFPF -~ur~u*~u$FP uvFPF Pq, u>`E P`W *PP]_^VWUv FPP  t ~Ev u vS tEdP# u7fP+PrP ttP+P ` t]_^VWUG uP  tFP u3F uB2P u4 PP$~t +PFP PFPP']_^VWU u'FPF*H=w, u P+FPF* H=w4~t~tF:FuF*F* ljF u' PPH~t~uFFvFPF P+PFP 1Pۃ uB2Pۃ u4 $1Pۃ u2Pۃ uvPP]_^VWU  uP+FPF* PP;=t=t~u PPg~u+FF FP ]_^VWU uP u"FPF  uFP5  tdv~@~E~E~}trPP~E[~ER~EICC;u;g6v6 t~E~Evv~E]_^VWU츳P  uv tP  t,v*F~u+F~t~u~u ~uF~t!~u~u~uF P0)8~uvF ~uvFPF Pm&& PP]_^VWUv u&FP~u~tT N uP+~FPW~u%~u~u~u+ OFP)F* =t=t~u PP~u+F uP+QFP~u ~u~tH ,F lP 1Pjڃ u2P\ڃ u PP]_^VWUW u+FPc~u ~u~tH * uP+tFP3!v tP  t vcPv  uGP  t P)P+P߃P  tP+P߃+]_^VWUP t ~MP t ~M+]_^VWUP t ~MPr t ~M+]_P~(_F*K~u5~u/~w(~u+ PK(+PFP&H : PP =w<]_^VWU ueFP~u~u ~uF8F*$~u~u~w FH :: 5=wH6 uP+FP?~u~F* Z=t=t~u PP~u+FF nP<1Pك u2Pك u PP]_^VWU uP+1FPF* H=w~t f PPj0vF;uF+PTPFP:]_# ^VWU FFP tlFP)=u]:<tP:FuD:Fu-:>%^|^G|^GF+]_^VWU vFFP  uFP  uFP-~}tFPP9ރFPu<_ubO ~ ^FFފFP6 uۊFPO ù~_tƋ^ƣ }PPPՃ+]_^VWU^P' tF3aP tF>P tF ++F>FP uFPy uF~0|z~7빊FF."F]_^VWUFF~FP@F t,~:u~tFFπ~a|΀~pȊF-aF뼋F]_^VWU~A|~ZF F]_^VWUFF~FF t~:uFd~FF t~.t ~FFދ~d]_^VWU~=~~tPPރ~E~EF*~EF*~ E~'~=t ~t+~L~=u=&t=|t5]_^VWU vF%PL  u(FP  u6*FP  u%,P  t/FP  uFP~}ttFƱ0~0|b~9\F.~0|~9FƱ-0+FPTF=A|~FFƱ-7F-=w7~5~tcPPԃ]_^VWU|>='ul~tP uGvPn t xPt ~F=.uF]_^VWUFx~|.~ ~~FF>"0~FF>"0~ |~FF a~xv ~F:~Fv F  u~=t~E.~FvF ux]_^VWUv1PvPvCPP1]_^VWU~ }uFF1PP!݃FP~tEPP݃~E~EF*~EF*~ E~!F~!.F~1#F~ CC;tg]_^VWU vYFP  u%[FP  u^FP  uFPFP~E;F)P+P&ԃPJ tP+Pԃ+]_^VWU>="u^+F>=t>="t ~F@~>=t  P+PӃ~ 5+]_^VWU>=\t>Pc z up k f>P t~ FF~ E*F=~%~~OPPʃFFFJ~ }u!v X u~ = ~ =}~ =u~u+FF>tv~ F FPvP]P66+P+PvP+P+P+P~ Ft`PP$܃~E~EF*~EF*~ E~1~;Fs+~W~;Fu~;Fv-<=v4)]_^VWU vFqFP utFP uFP;~}tFwPPGۃFPm~tK+>Pr tƱ-0 CC;ug >]_^VWUFF tv' u u FFƋ]_^VWU6~=t FPȋ~F;t+ ƣ]_^VWUK6~=t^ FP+P~tFHPv ]_^VWU>u^G tWgP6)6^F VWPmP6^t+P^wV@Z+P+PV+OVsP6^t+P^wV`(+P+PV VyP6+P^wVPP)ۃ~E~EF*~EF*~ E~~N-^~N%S=<t=>tF]_^VWU vFP+ uFP uFPjFP~EF*~EF*~ E~zF~~}t~tPP?ڃ~utFFF:t+]_^VWU>=t>=;t+]_^VWU>=t>= ]_^VWU~A|~Z~ ~a| ~z+]_^VWU~0| ~9+]_^VWU~a|~zF- F]_^VWUvF=u>taF. >ME*FP@=w$6~ t]_^VWU>t2vP6,6+P+Pv P]_^VWU>t;v=FPP6 6>+P+Pv+P@]_^VWUFt~tPP<ȃF%]_~EhF~)~t~E;FtPPڃ~E;Ft3~E(=+t=-t]_^VWU vFFP) u%FP uFP uFPW~}tFPPcكFP~tPPEك~E~EFF tFt!v F. >;uPPЃF. >E@t0F. >M F>t{vF~tfF. >E* @F~ tNv F. PbF. >FE~ tv tF]_^VW^VWU>tP+P+PP>tP+P+PPFFFFF;}'~EtF P~u~5PFFFFF;}'~EtF P~u~5PEɋ]_^VWU+P66P#]_^VWU+P+P+PP*~EF*~ E~J~fK~uPP؃4~+v؃~uۋ~+vCC;tg]_^VWU P t'v~EP tH8!FP u"#FP u%FP twv~Uv F=uv F=uF. F~ tr>t"~Et ~MYPPσI~E@u@H;~>>F P~MA~E~E>t~E@u(PPeσvvN]_^VWU+>F;6}+E Pv]_^VWUlP㸃 t>t(v9 u+P66P{FKF ;t.~ }+P+Pv +P+Pv P?F vv v v'(CC;ug~u]_^VWUlP, t>uv u> t F;tl6}t'PP!؃~E~E~)~~=u +~Ћ~CC;tgFPt t;P(PFPvqpv uFv t~E~E0=P u?P tPvD~E~E AP+P2׃ uv t E;uϋ]_^VWU졶;|9P.. vD PfDV]_^VWUv u]_^VWU~=_u~}_u+]_^VWUvD*>t@#u+]_^VWUF>t)>>R6v6S t6 H PvW;s6v>PvWFF>F T>F >F 6>F >F >F >F R>F >F >]_^VWUvO tF]_^VWUv~ FFN tGFFF]_^VWU FFFP1 tvFP! uFF+]_^VWUv3 t&F~=t~P~+]_^VWUM6Pc . F~;v~]_^VWUF;6>. >]_^VWUF;btFbP P ]_^VWUP P b]_^VWUPP]_^VWUFF~FF tI~:u~|~FFҀ~0|р~9˃~u F-0F$ F >F >vF u/66v6vW8CC;ug]_^VWUF%=u+]_^VWUNV 6VWUNV *$VWUNV VWUNV ‹]_^VWUs<tV4v]_^VWUv>PV]_^VWUv~ O|D1uD2u +]_^VWU~uF%F>uE%$>tFn~;ws660GF>0j~G0 F t FGFG0Nu~t6G.~~*FF |F t FGFG0NЋNj]_^VWUPvvv4+]_^VWU v <tV=u+FFFFF^ F  t4FFFF~uFлtCC;ug뽃~t ~tF Fu~u~t ~t DD+DDPv  u~t D ]bD bD\^WF FF^F-uF^FF0uF0^F*u^FF^F1F ^F0|9F.ȋ-0Fփ.uZ^F*u^FF^F1F ^F0|9F.ȋ-0Fv v |C^Pvvv v uf^vFN tF0^FFF F t6FFF F FPvvv v ? Pv H FvMF PE Pvvv v  |FPv  uD ]bDQ Pve  uDPvN  u~u DD TdDPD ~cDQ @~u Vv u~t(DPPDPP=t~D c~tCDPP=uDPP=tKVIP+PPV`=u,փlu&^Fdtot utxu%FȉFg^FF~}F؉FF- Pv P^F7V^WFVF~yFV؃FVF- PvvVs P^w7VF^GGGPF PPF^vvv v vFF~ft~gu~|F;F|FFF@F~}F~~FFFF;F}aF0PWvvv v $ FFF F vvv v ,|%;vtN=9.DPP=tVD0D1D2D3+]_^VWUv DDDDFF|^FF t-~.t'~:t!D;vy~a| ~zn GFÃ~:u*D;uR|uLDF=A|@~P:F-@D됍D;vG |~.u5^FF t%D;w+,FFFFFVvvvvvW v^F uFFFFF?t~|+F;F~N>^FFFF(^7v1FCC;tHgFF+ƉF }F~uFN tvv^W;vvv^FP^~01^^F]_^VWUv+ }G؋ޱ㋇B@><FFFF t2FP66666 FFFFFFFF]_^VWUv^W ]_^VWUvD |DLuAP~a| ~zn GFˍD;vG ]_^VWUvDP#P;D1D ]_^VWUv v^ W]_^VWUv~ uu W PVEP*]_^VWUv~  u} uuW P=tb}uPbE u Eu}uW t.W~uFN uvv^W]_^VWUv FFN^+v t+v ڊFN^FN^^?t^FF^FFF]_^VWUv~nN^ FVF V ǙRPv v -FV t0ǙRPv v RPu0 uPPo t| u ]_^VWUvD | D0uaL}~|uPD u ?\}t P PP\G*F~u\u '^CC\ F@DD@@D}\D*]_^VWEEE M}WU uWP u]Eƈ*]_^VWUv ]_^VWU v@u3V t%~u VJ~tD +ҹFVus| tm|uPzD uD D1tPDP!P u+FFFVF؊FN^F멋F ؊FN^F^?t^FFFƋ]_^VWUv ~G?uOFFGF uF]_^VWUv~ G:u F?u+Oߊ:}]_^VWUv ~FFGF uF]_^VWUvF?UvD |D0t|u)P D u VP uzt V ui$L}VP uO\D*uB u/L}VP~ u"\D* t| u ]_^VWUv ]_^VWUF*^~} ~|=u뿀+~Ǚ)FVFVF V F V %؋ʋÉF^ N +ɋÉF|tF;D1uD+DD;F0|uPD tFD1V+P u#D+DD+FDFDD$D+]_^VWUv@u/D1+ҹFV|tu+H]_^܋_܍_VWUV F++ ;wr w;?r+?w@]_^܋_܍_VWUv ~++ ;Wr w;r+W]_^VWUFFFFFFFF u t tu<>uFFvF2~ȣF F F]_^VWUF VWUF Pvttt4 DDD]_^VWUF VWUF Pvttt4\ DDD]_^[6666VWU^VWU^+VWU^VWU^FGV؈FF%|+|ǙFVFV]_^VWUv |DFFtV u+D1F;D rFt w;~trGǀ;~taWPDP!PF t2~t~t ;|u0 *FF~} ^PV@ uFD1DD+DD]_^VWUvD+D|P Pr+P+Pf^FݍDG t# t ta| zFFDh^G~t&Nv=A|Z 6PPPq uP P+P+PPPvB uvP6PPPvv$ uVv ~ FF~FV؈FF%u wFv~Vv~FN+N}^^^^هVv~F9~Vv~FNl N^:ttF~vV:utA$ u u u t7yErIs r allocating name tableError allocating extern tablerCan't open source filecon:lst:wbCan't create output file Pass 1 Pass 2 Can't reposition source file Sorting Symbol Table %d Printing Symbol Tab{*uJBE{*vJNA{*vJNBE{*wJA{*wJS{*xJNS{*yJP{*zJPE{*zJNP{*{JPO{*{JL{*|JNGE{*|JNL{*}JGE{*}JLE{*~JNG{*~JNLE{*JG{*LOOPNE{*LOOPNZ{*LOOPE{A؉6>]_^VWU+*F y=ط7VWU+*F)VWU*V F y؃ VWU*V F+ɋ tr ψ+]_^VWU^VWU^GV؈F%uF~FVle <<< SYMBOL TABLE >>> %-8s %02x: %04x multiple extern global word byte undefined register seg-reg string immediate indexed %d names (%d local, %d global, %d external), limit is %d moduleEnd of %s -- No errors 1 error %d errors *LOOPZ{*LOOP{*JCXZ{*RET+RETF+INT}+ESC-REPNE-REPNZ-REP-REPE-REPZ-LOCK-ES-&CS-.SS-6DS->DAA-'DAS-/AAA-7AAS-?NO؈F%uFv~Vv~F8:Vwr;vwr;~wr;Fr Fr:Vwr ;vwr;~wr;Fr +F~vVVVVV⿊Vv~F^+^À| ^+ҋ‰6>]_^VWU^VWU^FV؈FF%Assembly aborted#IFNested too deepInvalid argumentInvalid forward referenceELSENo matching #ifOnly one #else per #ifENDIFNo matching #ifINCLUDENested too deepString requiredarCan't open include fileREPEATNested too deepInvalid argumentP-CBW-CWD-WAIT-PUSHF-POPF-SAHF-LAHF-INTO-IRET-XLAT-HLT-CMC-CLC-STC-CLI-STI-CLD-STD-PUSHA-`POPA-aLEAVEt$Fv~GV؈F%u}F~+й8n^^^s F~vV܋^^|5rs ^+ҋ‰6>]_^ÅVWU~VWU~+~ x Et @"EuHvt @Invalid forward referenceBad #repeat count (1 assumed)ENDREPNo matching #repeatCan't reposition source fileTITLESUBTTLString requiredPAGEInvalid page widthInvalid page lengthLISTNOLISTRELISTNo matching #list or #nolistInvalid pre-processor d-==:==EQU=:=EQU:::Invalid syntaxMust be labelled%s: con:r Invalid, re-enter: String requiredMust be general registerMust be memory referenceMust be word registerMust be wordMust be immediateMust be CL or =1Must be Cs y]_^VWUVWUFu6V^ Ҋ΁t!|;}Ft+]_^Ǥǐirective^ ^ %s %02x:%04x %04x wCan't open list file%s: %s %s Page %d No argumentNot enough argumentsByte or word?Invalid typeNo such instructionInvalid portMust be DXMust be AX or ALCannot be indexedForward reference not alL or immediateToo far awayMust be < 256Must be immediateMust be immediate < 256Must be word registerMust be memory referenceMust be immediate < 64Invalid op-codeALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIESCSSSDS,Missing ",",Scan resumed here,=&WORD7FA<K""""!!!!!5!. M H H . . !!!!m"t"t"m"t"m"t"h"####$$E$$$$$$%%%%#)#)lowedWarning: 80186 instructionEQULOCORGRELOCbREORGbMODULETLINKENDBYTE{DB{WORD{DW{RESRSALIGNMOVPUSHPOPXCHGBYTEIndexed immediate is illegal[++]]Invalid indexMissing "]",Scan resumed hereBXBPSIDI&&||Relocatable illegalRelocatable illegal&&&^|||Relocatable illegalRelocatable illegal<==>Relocation clash>><<Relocatable illegalReloc#)#)))))))))F*F*d*F*****u-u--u-&=BW////&^|333444%*/777!-~888 u; <; < < < < <;BFNRT`=j=V=e=[= fGF3G@`IIII @`JKJKJKKJKKKYKYKKKabrwMMMM DOUINOUTINSp'OUTS6(ENTER+BOUND,LEA LDS LES ADDN!ORN!ADCN!SBBN!ANDN!SUBN!XORN!CMPN!TESTN!INC]#DEC]#NOTatable illegal+-Rel+rel illegalRelocation clash*/%Relocatable illegalRelocatable illegalDivide by zeroModulus by zero()Missing ")"-!~Relocatable illegal#.$Invalid syntaxName too long0X0Invalid digit(s)''Too many charactersMissXcdefgorsuxXNXIXSXXWoXoXoXWYXWW KxTA@ B B@TurboDOS 8086 Assembler Listing$NEG$MUL$IMUL$DIV$IDIV$AAM%AAD%ROL%ROR%RCL%RCR%SAL%SHL%SHR%SAR%MOVS&CMPS&SCAS&LODS&STOS&CALL(JMing "'",Scan resumed hereMissing '"'   External name?Multiple defPasses 1 & 2 clashInternal name?External table overflow Name not definedName table overflow Invalid index%02x%02x %02x:%02x %04x %04x* %04x %02x TrunCopyright 1984, Software 2000, IncUsage: TASM srcfil {objfil} {-celsux12}TurboDOS 8086 Assembler Copyright 1984, Software 2000, Inc. oaErroP(CALLF)JMPF)CALLI*JMPI*CALLFI*JMPFI*CALLIF*JMPIF*JMPS{*JO{*pJNO{*qJB{*rJNAE{*rJC{*rJNB{*sJAE{*sJNC{*sJE{*tJZ{*tJNE{*uJNZ% cated to 8-bitscon:rdr:lst:pun:{NULL}0123456789ABCDEFcon:waToo many arguments $con:wCannot open stderr $r%s: cannot open %s: cannot create @ BCzE@GPH$tJL M(knO[...KK&KK&.Ì....VWUȎغ9]_^VWUF~ &]_^VWUF~ F &]_^VWUF~ &]_^VWUV]_^VWUVF ]_^VWUV;]_^VWUV N]_^VWU3&&& &.66FP)66P P]_^VWUF* u QPw))F*PFv.PvhPL)P P]_^VWUP t 6f~ ]_^VWU MF* uzFF*P6FFvFF uQ@CRhT*V W1_cY[.\@v:k ^^# `bxaz&Xcn2xeW ?hfSh@aQYjok 'Nm x9?o 6pOgIr#E@|osp+ŝuL67EwV߄xl: z{Η@|H½} PvP6xN&.&.&|.&~vN ...&TdDt Ptt..6tt\LTl | D^.....6.6.6uV..6\LTl | DDDDDDdTd..&3&.&.&|.&~F* u P(NF*PLv4FFFN t#FFPvPFFPv ӸP P]_^VWUF* u P-(F*PFPvP P]_^VWU.F* u P'dF*Px6..&.&.&|.&~.]_^.F&H؎м+*+$܋GF&HVWU츐P"0P0&~v ~ ugP/5rb.[ F6_FFvvP'PF*=tF*PFFPv&ӸPP P]_^VWUP t>u P:'6f ]_^VWU>u P'+PF* t4~=u6 F*PF uFFq+P%Kw P O 놸P/yCC;ug,h]_^VWUP PPI/P?/BP5/rP+/P!/P/P /P/ P.3P.SP.xP.P.P.N u66P&66P PFF~sv~狅P txP PFF~s2v~狅;t~~J#P&66P P u]_^VWUF* t4~P.P.'P.IP.rP.P.]_^VWUF* t3F*P66F uFFF~tdvN~+u66P .P6%F*=t~ }F.PF*P t=u6W F*PLSF uFFN t*66.Pw%66a& t̸P P]_^VWU F* u:FF*P6FFvzF uW9F* u hP$F*PvgP P]_^VWU_FYFF+FPFFPP-]_^VWUF* t3F*P66F uFFF~tJvN~+u66P -P6%PP, tP P]_^VWUFFP PFN t[vv.vv ;t0vvvv PvvPvv{PY$FF t]_^VWU3>u P-$fFdF* t~~ sx~Tu~EF*P~E"F*=*uvFF* t"F*PW6>P P66Pv,66%PPZ,F* t*~=tF*PP66뙋]_^VWU RF* u5F*P6FFvKF u P+E뜊F*P_vFX%Ev~EvFEFP u66=t@P6F*=t~unFFFN uvE=tv%;Euʀ~u~}u~u~E%uFFN tvFFPvJP P]_^VWU5>u %Pq+66:P\+66FP PFyF* u~=u6 F*P@F* u~ rF*P6n;u=u);u ;t!;uy;upFFFN t`vE=tv%;Eu;u~}t;u~E=uF~t u~uD66NP"66PP!66dP!66P PVVh,8COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 04/24/84) ..&X%.3&..&..&|..&~..;uP?  tZF&XEˋF&XE͋FF&X66EϸP66X+P FFN tgF&XE;uF&XE;uFF&XE*PF&Xu͋F&Xu돀>ju9~u% ]_^VWU F* u FFJFFF~sv<:Fuvhu+狅FFP\PvFPlPvFP+PPv+PPv~uFFv0uFL#PFpuv&~FtNv+jrr t0PpppuP,PqkrvFpP5P'v;Pyrr8u@PEaRr}r%8=0u`fpuH9LP66P P]_^VWU>u P 6f<]_^VWU>jtFF~tL66%=uFe66=u"@P6=uF7F0l;u^;uF];uO;uF~uNPPv^F~F*PzPFFPv7 uڍFPvxF~t>\PvFP6~t'FPvKF~tlPvFP ]_^VWUFFFF~s~~*PF F Pv ڋ]_^VWU+j*FF~s ~3$C6l6nD܃%F~t~ uPUP6l6nzr.r%8=ur8t[PPpuUfrr%8F~}pu~8uqjrr%8PIp%=uhpu^Eb@1rrF@P6FFP#t+@@P6"FP@@P6\ujc66P@@P6PFP66P@@P6PH=wZ>jup~ P ]_^VWU>r P ]_^VWUr%j*=u P>ju+]_^VWU*FFFPv F=u v=PoP PQF~uF*P P8FPFPP =uUO3P3PPPFF~s ~EFP!P uFPvFF*=:u F]F*PEF]_^VWUF*=Lu+F*PF t F+F@FF]_^VWUFPPF*=0|~9~ ~A|)~F#~:|nF*F ljF뷊F*PF]_^VWUPb* P ]_^VWUr%82 P ]_^VWUr%8B 5Pq ]_^VWUr%8R [PL ]_^VWUr%8b P' ]_^VWU6pr%8r P ]_^VWUJPP ]_^VWUPP =uiFF~sEF&dP6,F~F*F&dP6 Ɖ벡>uP6h*=u63PPP~tNvPFPf]_^VWU P]_^VWUF*= tF*]_^VWU>ffF uf~,uF F*]_^VWU~t f>fF]_^VWUPP  tPP =u۸+]_^VWU*v FP~= uFFF~s ~E]_^VWUFF* Nj]_^VWUllP6nك]_^VWUy PPP u PPPP u PPPP u PvP6tڃP2]_^VWUvtF~=ty~*G~F~=F*P P+P+P]_^VWU4FPv=uPrP PTu*P P8PPPPP=uPP+P4P ƆPP u\F FFPFPFPF~u6~u?~:tFF uFFN t~}0|P~}9E~uFNFD*F*.x-0F*=~~uF뛋~}A}~}P~~tvFE*-@Fր~븃~.tFPt^>t!sW~= t~='t~="u ~F* F>ttFv~=t~:Fu~F]_^VWUP P?v P2 P P$+P+P]_^VWUNV 6VWUNV *$VWUNV VWUNV ‹]_^VWU쾸sF~rF&f u*O狅FF&fFu h*=tuKh*=tAFF~s ~ƅꍆPPPP t@FnPv+Pv t<>\t \PP% u PR#PPQF=tP~t\~.uQFFPFPFPF~t$~t0~:t%~.tFPF=uF ~t$PFPv MF]_^VWU~FF~s ~~E FF~s ~~E ~E ~E ~E~E]_^VWUvT<tV4vpك]_^VWUvt(tVPT=t+@t VF=t@tDPPQ=uD t uW+]_^VWUv%H=Hu_|tY|D1F;|sEWPDP"P t 'ǀPVKD1;D vD1D PP؋؋ʋP3PPPi*P PX+P+Pa]_^VWUF N tu>\uFF~s ~ƅ\FF~s>F F Pvہ>u\Pv=u\+]F=t*~t$~:t~.t~*t~ F F~ uŃ~*u~ F ?~ uF]_^VWUv<F*= |~;u"~ t ~,t~=u+ F*P ]_^VWU~ar ~zwn F]_^VWUFnF lVp>pP>p狅CFD1+]_^VWU쾸s<uVv v4+]_^VWU v <tV=u+FFFFF^ F  t4FFFF~uFлCC;ug뽃~t ~tF Fu~u~t ~t DD+DDPv_^VWU!P3Pv PvP u+]_^VWUvPhvP[Pav.]_^VWU~} u~E C~E M~E D]_^VWUP~F u+PP@FF*@PP PPPFF~}*F*P=PrP=PfFFtNFlPgFFlP Sp%$P]~u=vzrptP,Pr%8Ps`rA NrTr%8F~uX~ uO~&   u~t D =D ;>D\Pv  uD =D. Pv  uDPv  u~u DD ?D.D >DE. @~u Vv u~t(DPPDPP=t~D c~tCDPP=uDPPF.ȋ-0Fփ.uZ^F*u^FF^F1F ^F0|9F.ȋ-0Fփlu&^Fdtot utxu%FȉFg^FF~}F؉FF- Pv P^F7V^WF6 FFDFBF@FFFFDFBF@]_^VWUv^W ]_^VWUvD |DLuAPP<u0 uPP! t| u ]_^VWUvD | D0uaL}~|uPD u =tKVIP+PPV`=u,.DPP=tVD0D1D2D3+]_^VWUv DDDDFF|^FF t-~.t'~:t!D;vy~a| ~zn GFÃ~:u*D;uR|uLDF=A|@~P:F-@D됍D;vG VF~yFV؃FVF- PvvVs P^w7VF^GFGDGB@FFDFBF@FFVvvvvvW v^F uF(FFFF?t~|+F;F~N>^FFFF(^?\}t P PP\G*F~u\u '^CC\ F@DD@@D}\D*]_^VWUvD |D0t|u)P D u VP uzt V ui$L}VP] uO\D*uB|~.u5^FF t%D;w+,~a| ~zn GFˍD;vG ]_^VWUvDP#P;D1D ]_^VWUv v^ W]_^VWUv~ uu W PVEP*]_^VWUv~  u} uuW P=tb}uP7v1FCC;tHgFF+ƉF }F~uFN tvv^W;vvv^FP^W~uFN uvv^W]_^VWUv FFN^+v t+v ڊ0FN^FN^0^?t u/L}VP0 u"\D* t| u ]_^VWUv ]_^VWUF*^ȣFF DF BF@]_^VWUF VWUF Pvttt4 FDDDBD@]_^VWUF VWUF Pvttt4\ FDE u Eu}uW t.EEE M}WU uWP u]Eƈ*]_^VWUv ]_^VWU v@u3V t%~u VJ~tD +ҹFVus| tm|uPD uD D1t^FF^FFF]_^VWUv~nN^ FVF V ǙRPv v FV t0ǙRPv v FVF؊0FN^F멋F ؊0FN^F^?t^FFFƋ]_^VWUN v ~F]_^VWUv~ G:u F?DDBD@]_^[6F6D6B6@VWU^VWU^+VWU^VWU^FGV؈FF%uVv ~ FF~FV؈FF%u wFv~Vv~FN+N}^^^^هVv~F9~VvPDP!P u+FF~} ~|=u뿀+~Ǚ)FVFVF V F V %؋ʋÉF^ N +ɋÉF|tF;D1uD+DD;F0|uPD tFD1V+P u#D+DD+FDFDD$D+]_^VWUvu+Oߊ:}]_^VWUvF?u+H]_^܋_܍_VWUV F++ ;wr w;?r+?w@]_^܋_܍_VWUv ~++ ;Wr w;r+W]_^VWU0~}FFPFPFPvvvv v vw~guC=tG;~FNl N^:ttF~vV:utA$ u u u t7yErIs A؉F6D>B@]_^VWU+*F y=ط7VWU+*F)VWU*V F y؃ VWU*V F+ɋ @u/D1+ҹFV|t|+|ǙFVFV]_^VWUv |DFFtV u+D1F;D rFt w;~trGǀ;~taWPDP!PF t2~t~t ;|u0 *FF~} ^PV@ ut }0uO+ƉFЃ~| F;F}Fe F;F|F~~tG-~etFFЋGFЈPvvv v tNG.~~ F t FGFG0NڋGe~|G+G-F؉FGF> 0GF> 0j~G0 tr ψGEC+B@]_^VWU^VWU^GV؈F%uF~FV؈F%uFv~Vv~F8:Vwr;vwr;~wr;Fr Fr:Vwr ;vwr;~wr;Fr +F~vVVVVFD1DD+DD]_^VWUvD+D>PV]_^VWUv~ O|D1uD2u +]_^VWUvPF=t~ t GF~u;u+Ƌ]_^VWU~uF%F>$uE%>tFn~;ws6$6&B@]_^UVWU^VWU^FV؈FF%t$Fv~GV؈F%u}F~+й8n^^^s F~vV܋^^|5r$$ 6&u<+ƉF;Fr0F;FvFuNjG& D%;6&u+]_^VWUv|%F%^u^F^wuFNj^G6&]_^VWUFPPd]_^VWUF PvN]_^VWU4Fڠ3F @F FPvvv v ? Pv H FvMF PE Pvvv v  |F$PF PPF^vvv v vFF~ft~gu~|F;F|FFF@F~}F~~FFFF;F}as ^+ҋ‰F6D>B@]_^VWU~VWU~+~ x Et @"EuHvt @s y]_^VWUVWUFu6V^ Ҋ΁t!|;}Ft+]_^ùȹxgFFҍF PFP)~]_^VWUv |DFF]_^VWU8F F^FF^F=%t u4vW^WF FF^F-uF^FF0uF0^F*u^FF^F1F ^F0|9F0,PWvvv v $ FFDFBF @F vvv v ,|%;vtN=9~01^^F]_^VWUv+ }G؋ޱ㋇NFLDJBH@FFDFBF@F t2FP6B6@6>6<& ?ACDEFGHILMOPQS          #(-2:BJQV[`emuy}$+29@TOIRETAAMAADXLATESC ESC ESC ESC ESC ESC ESC ESC LOOPNZ LOOPZ LOOP JCXZ IN AL,IN AX,OUT OUT CALL JMP JMPF JMPS IN AL,DXIN AX,DXOUT DX,ALOUT DX,AXLOCK REPNZ HLTCMCCLCSTCCLISTICLDSTD%s%04x%04xAL,AX,,AL,AXTUVWXZFX]bglqvX{ CDES6;@E """"%}"""""#$H#Z##$$/$V$$$$ %>%W%w%%%%&abrw*++ + DOUXcdefgorsuxu5555h6+5555Y5~606T5^5 KxTAGNU\cjqy   $).234 5 6<BHNS,=,=%02x%04xMOV %04x:%04xMOV ,=,=1,CLREP REPZ ,=,AL,AX%02xInvalid caseALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDI%s[BX+SI][BX+DI][BP+SI][BP+DI][SI][DI][BP][BX]%sESCSSSDS%sADD OR ADC SBB AND SUB XOR CMP %sADD @ B B@filorux{~AXBXCXDXSIDIBPSPCSDSESSSPSIP TurboDOS 8086 Debugger Copyright 1984, Software 2000, Inc. * Invalid command A Display memory in ascii [Address] or [Range] C CalculX]b ch i nr} $-6@JT^hrz  ADC SBB SUB CMP %sROL ROR RCL RCR SHL SHR SAR %sTEST NOT NEG MUL IMUL DIV IDIV %sINC DEC INC DEC CALLI CALLFI JMPI JMPFI PUSH %s%02x%04xcon:wSTDERR$con:rSTDIN$con:wSTDOUT$ Unable to open $ $ con:rdr:lst:pate sum/difference Value1 Value2 D Display memory in hex [Address] or [Range] E Examine memory [Address] F Fill memory Range Value G Go to program [=Address] [Address] H Help (this menu) I Input port Port-address L Load program for d #()*+,049>CHMRW\aipv| y|un:{NULL}0123456789ABCDEF@ BCzE@GPH$tJL M(knOQ@CRhT*V W1_cY[.\@v:k ^^# `bxaz&Xcn2xeW ?hfSh@aQYjokebugging Filename M Move memory Range Address O Output port Port-address Value P Put ascii in memory Address Q Quit S Save program after debugging Filename T Trace instruction [=Address] [Length] U Unassemble instruction [=Address] [Le !&+08=BGLQV^dinsy~ADD ADD ADD ADD ADD AL,ADD AX,PUSH ESPOP ESOR OR OR OR OR AL,OR AX,PUSH CSADC ADC ADC ADC ADC AL,ADC AX,PUSH SSPOP SSSB 'Nm x9?o 6pOgIr#E@|osp+ŝuL67EwV߄xl: z{Η@|H½} Pvngth] V Verify memory Range Address W Where function [T] Function Number X Examine register(s) [Register] Z Parse command line Command Line %04x:%04x %04x %04x %04x:%04x %02x%04x:%04x %02x = Range and Value missing Invalid RaB SBB SBB SBB SBB AL,SBB AX,PUSH DSPOP DSAND AND AND AND AND AL,AND AX,ES DAASUB SUB SUB SUB SUB AL,SUB AX,CS DASXOR XOR XOR XOR XOR AL,XOR AX,SS AAACMP CMP CMP CMP CMP AL,CMP AX,DS AASINC AXINC CXINC DXINC BXINCnge No program loaded %04x:%04x %04x:%04x Port-address missing %04x = %02x Range and Address missing Invalid Range Invalid Address Port-address missing Invalid Address %04x:%04x No program loaded No program loaded %04x:%04 SPINC BPINC SIINC DIDEC AXDEC CXDEC DXDEC BXDEC SPDEC BPDEC SIDEC DIPUSH AXPUSH CXPUSH DXPUSH BXPUSH SPPUSH BPPUSH SIPUSH DIPOP AXPOP CXPOP DXPOP BXPOP SPPOP BPPOP SIPOP DIJO JNO JC JNC JZ JNZ JNA JA JS JNS JPE JPO x %s (%04x) %04x:%04x Range and Address missing Invalid Range Invalid Address %04x:%04x %02x %02x %04x:%04x No program loaded %s (%04x) %s (%04x) %s (%04x) Invalid Register %s %04x = %s (%04x) No program loaded Execution haltJL JNL JNG JG TEST TEST XCHG XCHG MOV MOV MOV MOV LEA POP NOPXCHG AX,CXXCHG AX,DXXCHG AX,BXXCHG AX,SPXCHG AX,BPXCHG AX,SIXCHG AX,DICBWCWDCALLF WAITPUSHFPOPFSAHFLAHFMOV MOV MOV MOV MOVS BYTEMOVS WORDCMPS BYTECMPS Wed following return to o/s Invalid Filename: %s Program not found Unable to load program Program loaded Invalid Filename: %s Unable to create file Program saved Unable to write file: %d%c:??????        ORDTEST AL,TEST AX,STOS BYTESTOS WORDLODS BYTELODS WORDSCAS BYTESCAS WORDMOV AL,MOV CL,MOV DL,MOV BL,MOV AH,MOV CH,MOV DH,MOV BH,MOV AX,MOV CX,MOV DX,MOV BX,MOV SP,MOV BP,MOV SI,MOV DI,RET RETLES LDS RETF RETFINT 03INT IN' ICopyright 1984, Software 2000, Inc. (Version 24-May-84) U^.;]R&T؎м): )+*+3@܋GR&TuF.>Etx~uv;FuPt'UFPH7HF ~C~}_u8~EAFP3 F=tF.>Et ~EэFP F=t(F.>Et%FPP01FFPF=~uF.>MF.>>EF.>E F.>E +҉FVvvǙdfF.>Etdf`bP$F~tF.>EuF~tuF.>EF.>E F.>E +҉FVvv ǙtvF.>˱VWUv vEP9P9 h()+P/]_^VWU~} VP@/+bNtSF v <=-u~ @PPY>ڀ>bu~ 5bP>>u ~ 5VP.먀>bu VP.G+D bPn+F }D F FE ~>F=tAF.>FE F.>Et)F.>vE FPP0rPd u~u.P6B |0L +P<%P6B a0F FP5@F~UFPP6B 60:P6B %0L +P$FP!P6B Ettvpr~t+ǙFVFFF;T }xF.>E%=uۋF.>}uȃ~uFFF.>FE F.>EF.>E +FV|vv3ǙFVPRFFF;T }kF.>E%=ubP+J }3+J P@+H }F H P+F }J FP+~=ubP+~=u VP6.P ,~=ubP+~=uFvvv6H +PP=bPg+FPv6J 6F +PbPr=Pv6J 6F 0FP5@FFFFPFPiF=uFPF=uF.>F@%E~tF.>M~}#~>FF;V pFV g%P$ZFF~u ~uF?~݀ v=t HP.vۋF.>}uȋF.>FE F.>EF.>E +FVvvǙFVTVdP\ t XZ\ ^ FFF~}/~\ ^ <>~狅02\ ^ FFF;T }zF.>Et+PvPR=]_^VWU R 6F )PbP,P.< >< t36< PP! u 6< -PPs7Pg7P5<uP tFP tR R .b FP u P uFFGFX =tnX .>MX .6~>FD X .>FE F.>EtX .>vE ~t~u P!$+FFFFFF;V ~~>F=tދF.6F.>ED rP tF.>F.>E FF.>EuF.>vE F.>E FF.>FE FFF;T |F.>Et$F.6F.>+ED 뺋F.>EtF.>E FF.6F.>E D qvT)F }F Fv)F }J Fv)FvI*F^?tvPvvvE*Pv;P: u]_^VWUf~,t ~t ~ +]_^VWUf~t~;u+]_^VWUv+F<tFP;FuEu~u._P6B -L +P"aP6B -F F.Fv=3@F~UvݸnP6B -4rP6B -L +PN"vݸtP6B p-v2@FrP# txP6B D-.L F~}~F>V v{P,PF=t\F.>EuIF.>DE F.>E F.>FE F.>MP(F=toF.>Eu\F.6~t狅4D F.>E F.>FE F.>M]_^VWUFV +]_^VWU~A|~ZF F]_^VWU>R u Pj+PP4 u PP+6Pl4 u *P2+6T P V<$>.>MrP' u*mP usP  uuP t:cP tFYF^cPvCC;ug~t6: &#zP,]_^VWU+FFFF~}HFF^v~+Љ<>8:46~쉅02미PF~tF.>EuF~tFFhP ubP u+FF؋ʁ]_^VWU\ W"` u PsO tF]_^VWUP#mPn t+P^$P6B #.L >X t7>` >Z >Z G>` 6Z 6X >+Ɖ>Z >` F~}~F>V 9PFAP6,B ueP*B N L ]_^VWU#zP4+FFrP t)+Ps)P6B 4.L F~}~F>V FFF;R |wF.b P&PD&PF.b Pt(PV+: uF.b PP3hP uA8P u3FFF;T } F;FtF.>EtF~t ~t+>Z ǙFV~uF.>EF.>Z E F.>E +FV>X u6X + FX .>E FF.>Euv FFFFF;R |pF.b P2PIPF.b PP: uF.b PLP"QP5FF%=tF%@FfF~tF F FFF =@t=tFN uFFv F@)FvF =@P)]jFF%=tF%@FfF~tF.>MFN u ~tF.>MFN u(FPwFP8P8=|aFPP98=F~>F7FF~>FFPF̋F;Fu!~t1F.>E FV >X tP*X ~uXFFF;T }kF.>E%=uۋF.>}uȋF.>FE F.>EF.>E +FVvvǙFV@BFFF;T t=tv~F>` F뢃~tF F FFF =`t=tFN uOFFvF@@)FvwF =`t=tv~>` FFF~>FF.>EtFFF~>FFcP trP uFPP2rP uP'FPP6B 2FIFCFFPPFP7 uQF~u+P$;Ft P(FP F=uF.>Eu8PFPD7 uPFFP F=}kF.>E%=uۋF.>}uȋF.>FE F.>EF.>E +FVvv}ǙFVDFdPB uHJvv?ǙDF@BPF~tF.>EuF~tuF.' FrFPcP tmP uFPhP mP u-PFPoP6B L <F6FFP#FFFPkFPF=uF.>F@%E~>FF;V ~FV xP uF.P teFPFPt~F;E~ F~E~F;E~ F~E~F~됋F~)=+t=-ty~}u~t~E]_^VWU P t2v#~E=}~EP t3 P t2v~EPP6B L P P6B L F;6T |.>Eu+P}.P P6B .>Et[.>E$ #P6B RH=wV'P'P6B ,,P6B 6P6B L >EtkFPzGFFFFF;V ~~>F=tދF.>EumPl u+P\F.PP6B uF.>E P6B FH=w>vPP6B F.>uP tP+P;P tvd~؋~FP tJFPGF~u PNv~F.>E~E~E-v u v  u(P+P]_^VWU+~E~E~]_^VWU~v ^ W =th/]_^VWUF;tFP P]_^VWUP P]_^VWUPP]_^VWUFF~FF tI~:u~|~FFҀ~0|р~9˃~u F-0F빊FF.F]_^VWUFF~FP׃F t,~:u6B L F.6F.>ED F~}~F>V vPDCC;ug~t6: FFF;T }BF.>EuF.6F.>E &>ED벸P]_^VWU~t F5 t0 uN ~G +Nu˃ |N ~Gƈu;~t+]_^VWU.-Fv &;|-v }v +-PV57P["-PV:PDv =P7]_^VWUFN tPv ]_^VWU(6,P> u~tFFπ~a|΀~pȊF-aF뼋F]_^VWUFF~FF t~:uF~FF t~.t ~FFދ~]_^VWU~=t ~F=.uF]_^VWUF~|.~ ~~FF>0~FF>0~ |~FF a;T |+F.D D ]_^VWU~t F;T |+8F.|狅<>FV| | +FV؋ʋË]_^VWU6: : W F=u P F]_^VWU6: : W F=u P6: : W F=u PF F<_ubO ~ ^FFފFP uۊFP* ù~_tƋ^ƣ,. }APP+]_^VWUJP0 tF3MP tF>,P tF ++F>,FP uFPT uF~0|z~7t~v ~F:~Fv F  u~=t~E.~FvF u츜]_^VWUv1PvPvcPP1]_^VWUFN t6B v B W]_^VWU>L t>L ~6B PB WL ]_^VWUL ;F>L ud]_^VWU>L tO]_^VWU6: : W F=u P~FF uЋ]_^VWUlP te6H PPP@ u P"P!PZhP4 tF|ޱ㋇6 4tVޱ㋇02FVFV؋ʋÉFvFƱ0~0|b~9\F.~0|~9FƱ-0+FP/F=A|~FFƱ-7F-=w,7~5,.~tOPP]_^VWUW>,='u2,1~,.`P u bP+P\+]_^cPԃ t)6B PB W=PPU6B 6B PB WL ]_^VWUN L <FF~}6B PB W㸊P6N 8P6B k .L ]_^VWUv; 6D KPS]_^VWUNV 6VWUNV *$VWUNV +Pޱ㋇46FVFV؋ʋÉFvޱ㋇8:FVFV؋ʋÉFvx 2O t +P9` F\ O t^FP6@ ]_^VWU6@ v@ W=u ;P]_^VWU6@ F%PVWU>,=\t,>,P[c z up k f>,P tK+,>,P t,Ʊ-0,CC;ug >,,]_^VWU`6,~=t FPȋ~F;t+ ƣ,.]_^VWU>,=VWUNV ‹]_^VWU쾰!s<tV4vσ]_^VWUvt(tVPT=t+@t VF=t@tDPPQ=uD t uW+]_^VWUv%H=Hu_|tY|D1F;|sEWPDP"P @ W=u SP6@ F%P@ W=u kPm]_^VWU>B t 6B 6D ]_^VWUPPe tPPS=u P]_^VWU 6F W PvPPp> uvPP6> PP ut>,=;t+]_^VWU>,=t>,= ,]_^VWU~A|~Z~ ~a| ~z+]_^VWU~0| ~9+]_^VWU~a|~zF- F]_^VWU+>F;6T }Wvo u]_^VWU>T |nP3T .vVc+t 'ǀPVKD1;D vD1D 붋FD1+]_^VWU쾰!s<uVv v4+]_^VWU v <tV=u+FFFFF^ F  t4FFFF~uFлCC;ug뽃~t ~tF Fu~u~.,PP tɸP u>,=t6>,="t->uvF+FV؋ʋ>` ,.>,=t ,. P+P>uPPPaFPP t_~uPPm,~F;2wr DDDD D D T T ]_^VWUsPڃ tePFT H;~CVP@G;>T }ދ.P.P ~WVϸP]]_^VWUF.F .FFN tFFGF]_^VWUsPك uuPt ~t DD+DDfPv  u~t D FD aGD\kPv  uD FD6 pPv  uDuPv  u~u DD HD:5D HDo5 @~u Vv u~t(DPPDPP=;0r΋~狅<>FVFF>uPP tFbvF+FV؋ʋ>` FNF+FV؋ʋ>` FF+FV؋ʋ>` vFFF+ƉF =w6> ]_^VWUvvFP uFك uP+PP6B .L F;6T |.>Et+Py.PP6B .>E$ P6B `H=w.>u .>u P6B $.>EuP6B ( t~D c~tCDPP=uDPP=tKVIP+PPV`=u,.DPP=tVD0D1D2D3+]_^VWUv DDDDFF|^FF t-~.t'~:t!D;vy~a| ~zn GFÃ~:u*D;uR|uLP^F7V^WFVF~yFV؃FVF- PvvVs P^w7VF^GGGF졚FꡘF衖FFVvvvvvW v^F uF~FFFF?t}F~~FFFF;F}aF08PWvvv v $ FFF F vvv v ,|%;vtN=9~01^^F]_^VWUv+ }G؋ޱ㋇    FFDF=A|@~P:F-@D됍D;vG |~.u5^FF t%D;w+,~a| ~zn GFˍD;vG ]_^VWUvDP#P;D1D ]_^VWUv v^ W]_^VWUv~ uu W PVEP*]_^VWUv~  u}~|+F;F~N>^FFFF(^7v1FCC;tHgFF+ƉF }F~uFN tvv^W;vvv^FP^W~uFN uvv^W]_^VWUv FFN^+v t+vFF t2FP6N6L6J6H6 FFFFFFFF]_^VWUv^W ]_^VWUvD |DLuAPP@u0 uPP% t| u ]_^VWUvD | D uuW P=tb}uPE u Eu}uW t.EEE M}WU uWP u]Eƈ*]_^VWUv ]_^VWU v@u3V t%~u VJ~tD +ҹFVus|  ڊFN^FN^^?t^FF^FFF]_^VWUv~nN^ FVF V ǙRPv v -FV t0ǙRPv v RFVF؊FN^F멋F ؊FN^F^?t^FFFƋ]_^VWUv 0uaL}~|uPD u ?\}t P PP\G*F~u\u '^CC\ F@DD@@D}\D*]_^VWUvD |D0t|u)P D u VP uzt V ui$Ltm|uPD uD D1tPDP!P u+FF~} ~|=u뿀+~Ǚ)FVFVF V F V %؋ʋÉF^ N +ɋÉF|tF;D1uD+DD;F0|uPD tFD1V+P u#D+DD+F~G?uOFFGF uF]_^VWUv~ G:u F?u+Oߊ:}]_^VWUv ~FFGF uF]_^VWUvF?u+H]_^܋_܍_VWUV F++ ;wr w;?r+?w@]_^܋_܍_VWUv ~++}VPa uO\D*uB u/L}VP4 u"\D* t| u ]_^VWUv ]_^VWUF*^ȣF F F]_^VWUF VWUF Pvttt4 DDD]_^VWUF DFDD$D+]_^VWUv@u/D1+ҹFV|t|+|ǙFVFV]_^VWUv |DFFtV u+D1F;D rFt w;~trGǀ;~taWPDP!PF t2~t~t ;|u0 * ;Wr w;r+W]_^VWUFFFFFFFF u t tu<>uFFvF2~|P P(+P+P^FݍDG t# t ta| zFFDh^GVWUF Pvttt4\ DDD]_^[6666VWU^VWU^+VWU^VWU^FGV؈FF%uVv ~ FF~FV؈FF%u wFv~Vv~FN+N}FF~} ^PV@ uFD1DD+DD]_^VWUvD+D>PV]_^VWUv~ O|D1uD2u +]_^VWUvPF=t~ t GF~u;u+Ƌ]_^VWU~uF%F>zuE%)~t&Nv=A|Z  PPP' uP P+P+PtPPv uvP PPPvv uvP PVPa+PFPv7PJ]_^VWU0~}FFPFPFPvv^^^^هVv~F9~Vv~FNl N^:ttF~vV:utA$ u u u t7yErIs A؉6>]_^VWU+*F y=ط7VWU+*F)VWU*>tFn~;ws6z6|0V F y؃ VWU*V F+ɋ tr ψ+]_^VWU^VWU^GV؈F%uF~FV؈F%uFv~Vv~F8:Vwr;vwr;~wr;Fr Fr:Vwr ;v]_^VWUF PvN]_^VWU4F:FFҍF PFP)~]_^VWUv |DFF]_^VWU8F F^FF^F=%t u4vW^WF FF^F-uF^FF0uF0^F*u^FFGF>0j~G0 F t FGFG0Nu~t6G.~~*FF |F t FGFG0NЋNj]_^VWU@Pvvv v |C^Pvvv v uf^vFN tF0^FFwr;~wr;Fr +F~vVVVVV⿊Vv~F^+^À| ^+ҋ‰6>]_^VWU^VWU^FV؈FF%t$Fv~GV؈F%u}F~+й8n^^^s F~vV܋^F1F ^F0|9F.ȋ-0Fփ.uZ^F*u^FF^F1F ^F0|9F.ȋ-0Fփlu&^Fdtot utxu%FȉFg^FF~}F؉FF- Pv F F t6FFF F FPvvv v ? Pv H FvMF PE (Pvvv v  |F0PF PPF^vvv v vFF~ft~gu~|F;F|FFF@F~( ^^|5rs ^+ҋ‰6>]_^óVWU~VWU~+~ x Et @"EuHvt @s y]_^VWUVWUFu6V^ Ҋ΁t!|;}Ft+]_^óalized %-8s = CS:DS:ES:SS: %04xundefined Page %d of TurboDOS Linker Listing for "%s" con:rdr:lst:pun:{NULL}0123456789ABCDEFcon:waToo many arguments $con:wCannot open stderr $r%s: cannot open %s: cannot create =8G3$1$.&uˊCtPSQR±ZY[XSQRZY[t <t<t0 @ BCzE@GPH$tJL M(knOQ@CRhT*V W1_cY[.\@v:k ^^# `bxaz&Xcn2xeW ?hfSh@aQYjok 'Nm x9?o 6pOgIr#E@|o @`>CZw 7 ',16 @`H!!+0b!!" s&'&'''''&BFNRT'''''+ +++,, ,%,abrw(2-22272 DOUXcdefgorsux<<<<=U< =sp+ŝuL67EwV߄xl: z{Η@|H½} Pv狅 = =<=Z=~<< KxTA@ B B@Usage: TLINK genfil {cmdfil} {-8bchlmrsux} Serial number violationTurboDOS 8086 Linker Copyright 1984, Software 2000, Inc. cmdgenparr* %s * oNo input files specifiedNot enough memory for name tableNot enough memory for externals tableAbsolutecon:lst:wCan't open list filePass 1 <<< INTERMODULE REFERENCE LISTING >>> rb%s: Can't open object file%-8s Module %sOriginUnit Duplicate def: %s Bad public def: %s Defines: %s %sToo many externals/moduleTransferDuplicate xfer address References: %s %s Bad token = %02x Code Transfer is not in Code (ignored) No code group (transfer ignored) ExtraStackEndCodeEndDataNot enough memory for output bufferPass 2 <<< MODULE MAP >>> UndCodeUndDatarb%s: Can't open object file%-8s Module %s Undefined name: %s %-8s CS:DS:ES:SS:%04x (%04x) Bad token = %02x Unexpected EOFUnexpected EOFUnexpected EOFUnexpected EOFwbCan't create output fileWriting output file "%s" Can't write output fileCan't write output fileCan't write output file Linker abortedNrProcessing parameter file "%s" %s "Missing '"'(Ignored),=AbsoluteOut of range(Ignored),+-()Missing ")"[]Missing "]"-UndefinedInvalid syntax^ ^ %s Too long0X0Invalid digit(s)'Missing "'"Name table overflow Sorting name table %d Printing name table <<< SYMBOL TABLE >>> %-8s = CS:DS:ES:SS: %04x (%04x) uniniti) ;)COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 05/22/84) `&b.<м` TurboDOS Z-80 Emulator Copyright 1984, SoÞ(🜀qÞ(ПqÞ(qÞ(؟qÞ&*qÞ(qÞ蟜qÞȟqÞ🜀qÞПqÞqÞ؟qÞ&qÞqÞ Þ ȟÞ Þ ПÞ Þ ؟Þ&"Þ Þ0€u@Àǀu@ÀÀu@À&u@À俨u@ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀftware 2000, Inc. 5tX-3ࡠ=@rt̻g&&&.&@&G&J&M-ࢣ˱߻Cy2TAS.LR [CtӴCvrux{< uN< u CCOÞ0ȟÞ0Þ0ПÞ0Þ0؟Þ&2Þ0ÞÞȟÞÞПÞÞ؟Þ& ÞÞ8蟜qÞ8ȟqÞ8🜀qÞ8ПqÞ8qÞ8؟qÞ&:qÞ8q@u&5GG& GGFF@u&t&4FF@u OO&5&tOO& ÀÀÀ&'$ÀÀÀÀÀÀ&'$ÀÀÀÀÀÀ& ÀÀÀÀÀÀ& ÀÀÀÀÀÀ& ÀÀÀÀÀÀ& ÀÀÀÀÀÀ& À À À À À À & À@À@CMtcztE9s_SzZtPzXtC  CCttntZtD^t Jt 4xSrڈCځrAsKP~[آ󥾞>Þ&qFOO&5@t&5GG&5GGFF@t&t&,FVFF@t OO&5&tFFOO&5&tÞ&qFOO&5u&5GG&GGFFu&tR&FZFFu OO&5&tOO&Þ&*qFOO&5t&5GGÇlnpFFt&tR&F@À@À@À@&@ @À̀ÀɀÀ΀ÀʀÀπÀˀ& RʶPXퟝsZRʶPXZÞ˟q&,FF&NÞ؟q&5GGâhRʶPXɟsZRʶPXZÞ˟q&,FF&N&5GGâiRʶPXsZRʶPXZÞӟ ߎ>&&E&T@szxࠉt #T7Hm6@y.8&RZ8t RZ8uTtuvCrS< s @P^2X.[þz؎úrCrËrZFFt OO&5&t&,FV dÞ&qFOO&5u&5GG&GGFFu&t&FFu OO&5&tOO&Þ&"FOO&5 t&5GGÉFFt&tÇFFt OO&5&t&,FV&2FOO&5(Āu&5GG&GGFFĀu&tFFĀu OO&q&,FF&VàhsPXXtRʶPXҟsZRʶPXZÞӟq&,FF&VàisPXXtRʶPXsZRʶPXZÞ۟qQ$&s uYsRʶPX۟sZRʶPKt<;ÊtC8 .<؎м`'TtT@t&TK1`&b˲ ñ'd )sӈut0j Vn(=]~z6K38=BGMGB[S^ciptý Why#4Eb??8COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/24/84) `&b؎м` ŀu3j5tjo%s);lrYYY+C CPY!"_P()=goKx( 0< [0<"2`i$ DSK#.:EIlqál)=ru\ywRZtA^< t<u أuBH&d0)ӉAH B.duoq9~ #27<FQXZix}%+57GWaetssu9s dKd͋)ud9ruu)ӉڋtJ$(tڠ÷K)rQSKtK)[tȄuACt7CC)sdӉCt  "%(+.1459<@DHLPTVZ]`cfilpq&5DTcr  ' 6 F U Z _ d i n s y ~  * : I T Z f j G<uvCKtlS{[ug hti8u8u'wuwtMt?wt.wt u!tC÷ۺ${    $ 5 ; L U ` m y    " % 6 D K T _ g s u    & / : C N Y d o z /=BGLQV[afkpuz* S [w:uCBڊSCZCڈCt ڊCڈCIډKt͋K"tjC< rCCtwu.± ߄u!.X$ns &f) ftJkxػUv&k]UVk].wtPSQs&_.u.wY[XUv &v&$]Uv&v &4v&] 1`&b˻t C<;tItC8ufWú˱ߺ˱ߺPߺXà$0$t۠xtñ'd )sӈut0p< `a( ar<{s, ð  Insert disk to be verified in drive  Enter to begin verifying  Verifying blocks on drive:  Verify aborted Verify completed - k bad blocks encounteredO Mark bad blocks in directory (y/n) ? " MarSTDSPOOL ; STANDARD SINGLE USER SYSTEM WITH SPOOLING PATCH ; PATCH AREA ;SUBMIT,CPMSUP ; CP/M SUPPORT MODULES SOMAPC ; USER SIGN-ON MESSAGE AREA MSTAPC ; MEMORY SPECIFICATION TABLE AREA NITAPC ; INITIALIZATION Mking bad blocks in directory Non-privileged user No verify drive specified Unable to lockout verify drive Verify drive not ready z Insufficient memory for verifyT Excessive bad blocks8 Error marking bad blocks vs&S ].Uv vP^ &P ]wz. U.&>8&>tP.S .&&.&6^&.&D&]ODULE RTCAPC ; REAL-TIME-CLOCK DRIVER KBDAPC,SCRAPC ; KEYBOARD/SCREEN DRIVER DSKAPC,DSKFMT ; FLOPPY DISK DRIVER AND SPECIFICATIONS  Bad directory blockS^U]^[ÜP.Ct2XSQR ZY[SQRZY[SQRtZY[PSQR$±ZY[X.UP ^&P vs&&].USP FFPPvv ^&]wz. U.&6V&DX@&"PS .&& BLOCKS].UP.S].UP.S].UP.S].UP.SBAD$ DIR]. UP P^ &>iP.S@~-6H~s&D&@.@]. UP P^ &>i@~-Hvs&>&EP.S@.@].U$~؊_6.&\] @Uv^v ^v.&YNRV+x>&+x7N x0y*3&+NQx [Qv_.&D] RUv vQVVR^FY]Uv V]U3vVZ].U^&^&;~^ &;}؉] kU~]* LODSEG = 0x0040 ;LOAD SEGMENT PARAGRAPH ADDRESS DSKAST = 0,DSKDRA,1,DSKDRA FLSRTA = 0X03 ;SET FLOPPY DISK STEP RATE USRSOM = 0X0D,0X0A, 0X1B,"C2","NEC-APC", ;SET RED COLOR 0X1B,"C3"," SINGLE USER", ;SET BLUE 0X1B,"C6"," (8/13/84)", ;SET CYAN 0X1B,"C5" ;RESTORE GREEN ; COMPAT = 0XB8 ;COMPATABILITY FLAGS ATNCHR = 00 ;ATTENTION CHARACTER AUTUSR = 0XSTDLOADR ; STANDARD LOADER SYSTEM NITAPC ; HARDWARE INITIALIZATION MODULE KBDAPC,SCRAPC ; KEYBOARD/SCREEN DRIVER DSKAPC,DSKFMT ; FLOPPY DISK DRIVER RTCAPC ; REAL-TIME-CLOCK DRIVER 80 ;AUTO LOGON USER NUMBER ; PRTMOD = 1 ;INITIAL PRINT MODE FOR LOCAL USER QUEPTR = 0 ;INITIAL QUEUE OR PRINTER ASSIGNMENT ; OSMLEN = 0X600 ;O/S MEMORY LENGTH IN PARAGRAPHS NMBUFS = 20 ;NUMBER OF DISK BUFFERS ; SRHDRV = 0XFF ;O/S PROGRAM SEARCH DRIVE (0=OFF,1-16="A"-"P",FF=BOOT DRIVE) ;LDCOLD = 0 ;COLD START AUTOLOAD ENABLE FLAG (0=DISABLE) ;LDWARM = 0 ;WARM START AUTOLOAD ENABLE FLAG (0=DISABLE) ; FLSRTA = 0X03 ;SET FLOPPY DISK STEP RATE ; ; ***** PATCHES (6/26/84) ***** ; ;RVNFCN = 0XE8,[PATCH] ;PATCH 1.40-2 ;PATCH = 0XA1,CKTAST,0X89,0X44,0X55,0XA0,CPMVER,0XC3 ; PFNFCN+0X150 = 0XE8,[PATCH+0X0A],0X90 ;PATCH 1.40-4 PATCH+0X0A = 0X3C,0X3B,0X74,0X01,0XC3,0X44, 0X44,0XF9,0XE9,[PFNFCN+0X168] ; CHNFCN+0X4A = [PATCH+0X15] ;PATCH 1.40-8 PATCH+0X15 = 0XE8,[ENADSP],0XE9,[WARMST] ; ALVNIT+0X33 = 0XE9,[PATCH+0X1B] ;PATCH 1.40-9 ALVNIT+0X38 = 0XE9,[PATCH+0X29] PATCH+0X1B = 0XE8,[GETNAB+0X2C],0X74,0X03,0XE9,[ALVNIT+0X0C],0X8B, 0X5C,0X11,0XE9,[ALVNIT+0X3B],0XE8,[WRITDE],0XEB,0XF5 ; CMDINT+0X1FD = [CMDINT+0X10E] ;PATCH 1.40-12 ; ;SVCMGR+0X1F8 = [SNDREP] ;PATCH 1.40-13 (NETSVC) ; ;DAFCBP+0X3A = 0X5D ;PATCH 1.40-14 (FILLOK) ;DAFCBP+0X3D = 0X5D ;DAFCBP+0X43 = 0X5D ; ;SVCOSC+0X15 = 0XE8,[PATCH+0X2E] ;PATCH 1.40-15 (NETSVC) ;PATCH+0X2E = 0X8A,0X45,0X0D,0XFE,0XC0,0X88,0X84, ; 0X92,0X00,0XC3 ; ; ***** END OF PATCHES (6/26/84) ***** +                                      33333ff3UUf     % (/369 ;< =?@ BCD FH K NNN O R SSVWXY[\ ^_` bcdghh i j qt y|                        ! #% &*5 88EF HI M O S VWW Z]gh j kst ~    "&* ,1EFHIXXXXdddehm qstwROLLOUT TMP+ xy{|~           ! $*.#7$/$/$ =$ $2U >2V =$`2i*2i*> d):i* (S$)͞$l$n)$:2 g:/ G:0 o>ҁ$o:i*ʉ$, *|"' %:N *|:/ GyG> x<ó$*| $> $> > $l$*'  ~w#] û" u%l rPX< t< t < t<t< à" uKD$t8<u:1<t2">#u $$t>#u H&"à" uQYQYQ>$tY"<t< s t<u< uÊNs P^Y@ u "$u -------------------------------------------------- DDOKID Okidata Microline 92 GIOS 28 Jan 83 V1.0 Serial No. 5006-0661-654321 All Rights Reserved Copyright (c) 1983 Graphic Software Systems, Inc. -------------------------------- $2Q :/ G:. 2/ $%>2Q >2/ ! :0 R%S%~ S% #L%*.%A*.%+~w"% :. 2/ 2N G:Q xt%%G:O xʆ%>2N 2- 2O j**' >2H 2I %~#ʭ% Ÿ%Û%%2I ~ʭ%*' >2I 2H ++ %~+% %%#2H ##:Y %>2X :Z %>2X 2#":"s u n i<$tAQY""$&CSQS[Y< u< t<u t͠""Q<u t&K|<u QS"<u$<u["":sG<uK[~<u5Q?Y[SQ tC&QS[YS" t*"" "uC&QS------------------                  ! #% &*5 88EF HI M O S V !/':P &:Y &:Z &2N G:X x;&! >6*#=4&:2 OG:Y x`&G:Z x`&G:P xy&ͽ%:H r& :2 22 Æ&*' > A>OV'~&B,ҧ&G:Z x½&d)ý&G:Y x&G:Z x&>2N `. )͞$2N n) Æ&>2N :X d):T+'G> ![Y&<u <u؎@:s,[&/ ؎bDb?t uLD0? u 0!c_Ë$Î$$ð% %% %"˻"'QYÊ$tP"""ډ #"$"""## t C#`͓)z%LST: >2^ "a ͐,}ͦ,}:^ =!M#*a , :t _   ~ w#!)"Ø#) Main file not completely yanked$33w:K ʀM#,  :s _ <|: Z>ͼ+*' "c 6 ! ͸ ):W ':P '2N +'x''>2N &$́'l$2O 2Q 2W 2X 2Y 2Z 2V =2P n)#2U ! ###x' i'>2V t'ͺ'G:R xʘ'Z)>IÚ'> G:S xʰ'd)>Eò'> n):J==og :- v+n)2z ~#$~':z 2z 'n)'d)'  3"Ë# # t߻"o$###6"Rȋ6" #JY #T@"#*#Ë$ـ>#tًȵ#Ë# Ê"###"" ؉#Ë$ ú$#ڊ#""##<uN #   w#6 #w*) Nv+͐%+"' +6 *) *c "' ͘#Z(Z)))Source File Empty!$͘#ØZ)))File not found !$͘#Ø, 2] ~)T>2] * ~," 2q *  :s _* * " 6>2q >2M :M '! (-o-:  P!p ~p!@ d))time: $n)z(>: {(>: x(l$n)! n)*) *;,-d)) bytes free $!+ n)*+ *) ;,-d)) bytes in use $! d))Editing $n):g (Z)U+:P!( )comment column is $:.2#ڠ#ù"2CQ$Y á"$$Ë""#B" ڊs "t"*"#Ë$ Ë$";rBR+ӋZñ##sQO#"Yt :t s_È3$ $ *) >|2} ͸  f : : n  !} 5~ w#  >|2}  +~ _ #6 #") 6>2K U 6^#p 6 # ) Cannot read line longer than 124 characters$w"{?½ >. {{? >. *~ ;,!) Insufficient space to compl$%#$.#>#GEE)#u >*#tsunD9GrGSyuX:*#sMHuD+9GrG-Su2u-kAu :*#suCn*#G2$ËG"""uσtlutc<uutGE " "$$~û$C:uû$Ë#$C$ds䠦$$QY# u&QYLр"ڊR$Y QȈYQZuR>#tQSQCS t ";r[CYϋ"Cˋ"C#""25hjhjhkjhkjhkjhkjhDSKAPC O DSKFMT O KBDAPC O MSTAPC O  8u GDGD3)#### 2*#Ê)##9t!sUG;u E+GE@ܰËG;EtsE+GEEEEEE)##À>)#t#uñ$'#>)#st QD+Gu  Dt;h?t$:u C,$uȢ$oxѠ#EQ."""*$YË$!##$#u!#ͼ!* * 6#}6""* $Z)) Disc Full - Temporory File Lost !$)n) :u _ ~#Ë" G "~ ³":2 <"22 )#ʗ"~#Ô"G:f x"1#Ҕ" + "1#Ҕ"~w"~ "+"#2N YQVW*#Ȣ*#*t2ɋ_^YRW3ҵ:*#sD;rЊt _ZRW:*#sD+Gtr;sЊ߰t _ZËGSFF[UQ;r F;FrY] à*#*#+#URQ;uF;FuYQu6$6#NT =t4Ok- t IRQ)sYZ;"sBQRsZY+[Z u̻ñ R$Y[ $u kt UtPSڋ$ RZ ڊڊ/[X:tr)>2N :2 !*% ~w + ##2N ~)0[?A:?!"D "F ! " " ! " " * " * " ! " " ! " :s 2v :t 2w :u 2s 2t  * " * " !" ! " !\" ! " ! " :v 2s :w 2t :U 2U !#*. !#*.2G)D(F+Fu +D+DF+F؉DYZ]ËGDEQRVSh/[:s Eu^ZY UVQ'#:*#s ;s F;w;FsްY^] U'#:*#s +Fu] U'#:*#s F+u, $ڈÃ?u3$$ uR$u t2هڋ$ٱ>#t u u:uGڋ;u3BCBCu¹هً:rهي #$6$$"U$t$ڱ2Cu ڈy2 # tP|t PD"X" C"V"S%#&Q&&&&&&&##,,,,,,,,,0Z\\]z^ad\at2\at+`ata\a t.%.x9.&%.%u.x9>a>ta:at">_ateaaؠ\aCXaa``]_π>`u%>nfu``d6d F*))__t$ $t""" #t &$t&!u #tut 2"#4# #w#:#r$u t y]# #$(###t%%`;;0@ARSR1.107ȎЎ؎u؎*L-f.pE?  """0/F)*X $y  B@N@O@a:au=Lt7>`u">`u~``0`u*]```u`````aa2bat_>`u V```>`t`(}```>`t:`t``_>_u>_t π>_t9_`Nu``2`t_```>`t؈؉C>$tÈ #>#uE> #u>6#>"3@### #Ê6""C:u###:rP$X<u>#u_Y$ uȢ#H#Q$!ڊ$PC$Ȋ$XC ۳ui ڈ ڊ*u ڊ@@@@E@GBP@ MAddPnnln"*h*$g.䓊䓆=uD械械橰䖨@t  g gb-昻gX-t'`?@uGt'gUjt%j>'gtc<u\<u=1<u62`jj:hr]>}L$,_2_tZ___`_ t.%.x9M.&% .%u.x98_t*)_t]:]t ] 0M`_ðCCÀ>`t>nft>bat>aatba_ >aatba.6; P>_t6_ P>aat I _B*$t_t%_` .0  B@@CX .; À>`tPU`XPX V^V^PX$V^V^Nx /CC u۱ň']ػ```OP0< r, 1 0Z`X%h`T`` 00]`` 00c`[urg" "#$\\$#Gt g#`#$$Ȣ#<s$##$$$À>#`u$"u"3ۉ""$$N{>$t ##<#u#>#t#K$#`$IaÀ>g ug 벻k=ERuG=MAuG=P t juU݋Q!D*EUTBPWk;tRЬCI;uZ;t tsMtC;rߋ_XYJ+͉ ++ڋûHtrZ\ G]û I<u2 t&Z` 00f`Q$Y.`X.`.&`.``Ȏ.`PSQRUVW.`.`&G%tȎ؎`&`X`_^]ZY[ X.`.&`.&`.`X.`.&`.`aȎ.`PSQRUVW.`.`&G%tȎ؎`&`X`_^]ZY[ X.`.&`.&`PQ1 c8Yt[>#`u$G $u#~Z$$$??t??t=$$$$)"&$$J"" nl"$à#jt-jkBû&*ɨuB<s%ӹ:tC-+ڊU$jtQt ]ʈ$]dj.b%.f%.j%.p%.|%.x%.%.%.%.%.Xda>dat`ca`da:caubt(>b(~bbb>btbFE.%t.x9.%t.%uG.x9 >bt<t6>bubӀ>] t]++Ҋ] *A[׀<t 8t\PQ1c< 59YXX"#À>#t$$>#`uO# t ##>'#uSꡛ$#cuL 6$$ t* : %.%ux*ʋӀt':rċ%ȎػMk(>`au>Yaua:au >]u\<tC\>YatZaZaYa^<t>]t ]]j>Yaut]]au]]u , >]u >dtP*dSfa>fat`ea`fa:eaubu$b bGdGO db< s *b:rÀ>bubGbR8.%.%.x9.&%.x9À>bu bG.9bbbbb haCÀ>bt#=0r =:r<;tW6ddhX&]aQ*aa؊]aG]>a>taaY**P=r==8,Z]at`ZaYa<tYaC>YatX#X]tz^tl^atVWSQbFhagab;>bt)G=;t ;>btAGga>ga FY[_^PVRvtЉFZ^XPVW|a}a>gaugaha>gat#<%u}ab|aga֠|a$<u|a>}at&|a|a.9_^XVQha>gaBdos Err On : $Bad Sector$Select$File R/O$]a@tofuga} uY^VQha>ga} uY^VQha>ga} uY^Vha>gat>gau)<t,<rdD<t,ga~b>dtb;d}bPdbdbX }ItGtp>b&e+*ee6er6eFe>eteeIe1e2eeeCFSڊBF[띹e؊SQKY[6e.%$bu+dbI|bd+IlS>bt+dȡdV>+dȡdHdbI=%>buddbI!dbIX9^Vha>ga=<}86ddt*P*<t d+<t O*dOX^^aÀ>^atOÀ>^atCON192DataACodeSERIALDMSCONBRFFCHRCONDR_ `u ,t*t&`RQ`` t YQYZ ES WORD 1 ;PHYSICAL TRACKS PER DISK RESTRK: RES WORD 1lVQha>gau* tttt[ bnzY^^aVQha>gau* tttt %6Y^^aaaaa_a_a.;@.;@`a`aÀ>bubGbñ>`u%>nfu``d6dqÀ>dtdP6ddVXÀ>dr%dd>dt>dPrdd>drd>dtd>dt ddOddd{PX`>dtd>dPrdd dd:aw.%u:at a.x9.z9 B@@.&%.x9=r PPJPXY.>9u t  B@@`PQd=t= }ddg- PPdXPddP+ddT>dtd1>duofPIdd>du =udYXdPddPdPSdd=Pu>dt[u=PtP"P;tG>dPudd0d%=pd -pd.dP+ddd[XSP㋇Ee[ád3d;d|>dt +dddS㋇e[Sظ`rd[PP`@tIBX@@`XV`@tpBd@@`^^PQ `@tF`YX`P@u tXKB@@@gahaHSP. <.&<.<..<.!<.6#< IB@@JB@@LB@@@ B@@XÃt'RP X AQpY rGZ`@tB@sB@sBPkBX`=Pr+;dsPd+X+dd+PԊ+ËbP.%$e뾊jÊ؀>\t1vAv'}"\:eteeˊee\*؊\%tw rr QP+eeX*T&Y<t<teee`ee>eteeSe0e8ee؎- CPMSUPOriginUnitDataCodeXTNTRYIOBYTERIBFCNSIBFCNRLIFCN.WPDFCN<RROFCN\DPBFCNRDFCNRSNFCN`DOÊDU`ú  RS[tZy\OÊTiD @`DtCD$CDCD$`/D P XD D:  Dt@  M`$t`/z `1`1 t`1 1t@tʀ`2D`*D `+D`)\`0` Oú  RS[tZy\OÊTi xڻ`\O\_QSTiK[$PG0ug̀ẗgWʶXuJW uW G XG Ë\U s RS [ZyË\UD] &C``t``(`0 u G`*  t0ӊŠt t` '` 8s (``6``/ b.`2 ( j`$t%`u`t `0x `/zŠ``( @t M`+`*`)t T`($t ËD P X`+   uDH:`1 ÊD<sPt e t 0ÊT` $8t0` `$ӊ`$` ` `&` &`ù  : |0` ÊD:` t `   aù   ?`ñ K` $Pu` $< u`Pt@u R/CuÜ`Pt@tRCú``\ `Ë\ `QL Y! ((t r ` `Pu  c ` $DataCodeWAITSIGNALDSTBLSDTCOCONOUTLNKPOL XLTBL TYPCOD UNLINK3FLSRT_DSKIN_#DSKDR_ a a  5!dCLGPtM` #` #@` "4M`   "M`          #&),/2!$'*-03"%(+.1SCREENXS [.Ct S[FFCHRCONDR_ `u ,t*t&` `3б C&  û` P`XÊr00`4 ^u`0 `tJ ` t `0x? ݈„u`<w R Zt`8`tu \ 0  uDu 4- `` J$tH`(L$/Nt@tʀH <^r `/?;:'"^!HH`````È< tttt ,t t0  u` t`Ë`0;`tC``9u`  PSQR ; ZY[X `9` uLt >`t`À>`t. RTCNULOriginUnitDataVCodeLNKPOLDLYTICSETDRFRTCNITSETDR1%SETDR2`!`uð u0LSTUt$ttt us `` t`RTCAPCDataYCodeINTENAGETSDSRTCSECDLYTICKBDREPCSRCHK SIGEOI ISRXITRTCNIT0/F ) `PSQRF ) `>`2r`PATCHOriginUnitCodePATCH ZY[X #RELIST ; restore listing status . SIOAPCeDataCodeALLOCLNKPOLWAITUNLINKSIGNALATNCHRSPINITKCOMDRVKSERIALfsw$0246+v a` $@a//`N%0246- aKK`*$@fȎмef.fRPQSUVW.f.f&G%tȎ؎f&fXf_^][YXZ.f.#f.f.&f.&fu(hf&ifkf&lffff>#f*6ef0 0aaùQ Y[pf rf؎frf@ff fcf8fUa[[`NW` Q )U8uM*] ]]]UY+_ËU0U@E)7ÀsW`+ _À t(s0` û  t]Àe eE(@tM MRUZ"E :Eu ð (tSCRAPCData1CodeWAITSIGNALTABSIZCURSORSLFLAGSCREENCSRCHKCSRENA! a  ia"=*TYCd(Y"B@N@R@@@@@E@oBFB@GBP@JB@@pB@@@@@pff&w&WÀ>sft *sfQY6ddDofÀ>sft *sfÀ>sfvsf>tfOvtfO6sftfRZf>ufu4+9ufvuffufff=v-f+ff>yft[.;Pnff._B.aBfwfyff>ft Pwff>M'U% !W`!W`9U"E :EuE']% _Ë]E)tCEE9u] !W`!W`9U"E :E uBE( u7]E(t :`u]CEE9u]E9t ] _ÈM(](@@@@@@@@@@@KB@!@@IB@@ B@@0B@B pB@@@@@@@@LB@@@VWQ`Y ` _^؎`uQ`B  < `Y`&`` ``` u s`ȹ u )`rfuyffX.;>}ftonff0._B.aBf{f}ffv>ftP{ff}ffZff>ft Pfuf~JB@@nffuf>ftPfG6dd.YB.>[BRPQ=IB@@JB@@Y^.fB< uu@0.` / E U/ tvUL@* E(ËUE)$t @t ËU 0t  ` ` w ` n p` À>`t`u``` F``yñ  >`u`0Z΀PrO:` r:` v` `t  uƀPr)0>`u `@t IO:` v `@u@@tQYsGÈfff>f~>>f6>f|/>f'+f;f|f >ft 6f>ff6f>ffÈfڋ`tR>fu Sfy[ffSUf][ft` `t O u` >` r`  ]R ZÈ0`` (r ` ``õP ,rΊ` {``À1rwȱ&`` À r8`  fC&&`6SFfffUf}][RSf[`ËSPX u[ ufQP$ &fXYQPff0 0ࣥfXYVRXS>ftD/ Ĝ V^$$CCNxuٱ1҉` vPH`&`` ` ` d` &`` @ P(Ȣ`&`` ` ` .` ` R 0€rZ /`&``  `&`` r [*V`[Z^ðHKPX V^V^PX$V^V^Nx /CC uرň'RZ RZ$RZPYXP+YXÉfffffff<u <uË6fff\&f1IDPFCN?AMFCN@DMFCNASMFCNBRMFCNCSESFCNDSERFCNESDTFCNFRDTFCNGRDMFCNHROUFCNISCFFCNJLOGFCNKLFFCNLADFFCNMALDFCNNSCLFCNORAVFCNPRDPFCNQSRSFCNRPDAFCN..`; RZy |  s <t< u 0 뫉&` ``uW` t± }u 1  sK &` `u:` ty<r  w  VSSBPFCNTRBPFCNULFDFCNVFFBFCNWSRPFCNXEOPFCNYSRDFCNZQPFFCN[FLBFCN\RCFCN]CCSFCN^CCIFCN_CCOFCN`SCBFCNaRCBFCNbSMCFCNcRMCFCNdEXTFCNeRDDFCN;fCodegDISDSPhSET -u  ðú`?V`` ؎ t \`< t < t ^  Copyright 1984, Software 2000, Inc. t(RS [([ R/[ I) `tڱ  4 DR1iCKATTNjENADSPkGETSDSlGETWSBmNETREQnPFNFCNoDT3FCNpMPMFCNqTSTUNDfOCNTRY fOTNTRY#fXCNTRY0fXTNTRYfERRXIT``````` ` ` ` ` ````` `  #: S [r.`&&:uC  ] r ,û` uڱ3`7`uû``)0` C``ú`à`y``````````` ``` `!`"`#`$`%`&`!#` '`(`)` *`+`",`-`.`/`0`1`2`3`4`5`6` 7`8` 9`:`;`<`=`>`A :`   q.  C$ to retry not found, bad m u    tOtQtStUtWtYt[t]t_ i <D_D]D[DYDWDUDSDQDO t ËdaDO DetPjD_t]l[|YtWTULS\QDO t^kVlƉ\QLSTUDW|Yl[D]D_DO mrKDSemory loading at OSNTRYOriginUnitDataCLOFCNCIFCNCOFCNRCIFCNRCOFCNLOFCNDCFCN RIBFCN SIBFCN PBFCN CIBFCN CSFCNRVNFCNRDSFCNSELFCNOFFCN u`<+%GETXDR?CALCBV@CKOPNDACKDRVLBDSKMGRCCKDRODGETLSAEZERODNFALVNITGADVDNOHCLSFPICRFCBPJGETDLSKFNDNDEL ?&CBRSBC ؋l][Z0&ti _tS\UD] guQ T uG DrB YS؎ K[u4S ˉڋ\UˋD]&&g[:G rg P&'0PX & tƄ Í DnCڋ\UC D]\s S t[ur t! P uňts0P"Xtj AQ  YDOuDj Dj uM#uI &:r`ډӉ\ 7 \C뻊D\T0)s؎ otD  ttDx\ÊD$¶` Ӌu%S *uD tT 3u Ts( `u.` `` u؎ڱ3`S`X $n   /, s:P<0t X  A `  ht ` tJ KtBR`CCڊC`C` Ct` S[ڌ،Z N륀>``t bALgCRPROCRESUMEISRXITGETTOSGETWSB"a"` \UuÉ`` y)QRS`` 9tӋP`6PZ[xZY0``uË`K`tû`0É` SZӉ .` o.` .`  u,`` :@u tVtXtNtP<t,tBt` u±>`u  0DS \UD]&&_S [` TDU &< uCڻ`S Q[  rEtu) r:t"<.tG<:tK`  r#t6u ru+< u r uJ ZS``Q[Y u*QS  S0CC ڈC7CC7CZ[WYyQ`Uڱ3 y `$ʻ` ˊt S  [t0ӈ  G tS  !ÊCDnE[ sULFDFCNVFFBFCNWSRPFCNXEOPFCNYSRDFCNZQPFFCN[FLBFCN\RCFCN]CCSFCN^CCIFCN_CCOFCN`SCBFCNaRCBFCNbSMCFCNcRMCFCNdEXTFCNeRDDFCN;fCodegDISDSPhSETDR1iCKATTNjENADS ،[[ \Oð(t`C<0r<:s<,0Ġ`%t`%Q`#rrrrr< s `#Yt$Y`?`@`A`B`C`` d st  ]tO et tC Q Yu-S`C` CtCڋ` ،Z`0``  tË``Ë` à`:u`AUTLODOriginUnit<DT h tDOËTU`4˃u tt$S @DOÈDPFCN?A1 DFIFO$SAVFCB%RDREC&WRFIFO'MAKEXT(CKWSLK)RESCUR*WRREC+ASWEXT,GETFXA-GETF1A.MFFXIT/DRFFO20GETEXM1DRFFO12SAVRRN3RESRRN4CKWRLK5GETS2A6INCRRN7FNDFFP8FNDNFPt ؎t / B  u \oS P iB x &$t tBCXGETXDR?CALCBV@CKOPNDACKDRVLBDSKMGRCCKDRODGETLSAEZERODNFALVNITGADVDNOHCLSFPICRFCBPJGETDLSKFNDNDELFNDDDEROVECTOUD] Ur PXDOu [uK1CTUBD] '<r<r &tBC t & G  8uP"X (tj2 AQ YDOu \3Dj rt u{$* GETEXMX GETMMBUPDCOMCLSEXTKSRHNIT FNDDEC CHKHDSFNDNDE ADVDNOCGETDEA GETDLSRDRECCRDRECGETBLKWRRECCWRRECI GETBLMCHKALVGETABAU GETNABqCLROTEFFFCN OPNFIL~CFFCNCLSFILSFFFCNSNFFCNDFFCNDELFILRSFFCNWSFFCNMFFCNRFFCN CQMCOMSFAFCN CKLEXT$RDRAND)RRFFCNjWRRANDoWRFFCNCKLERRCFSFCNSRRFCN%DO ;tj &GP&wS AQ YDOu [&GX&GDj Sr+tt 'u$4u )*u$DOÈDO  &, &5 & t &LOADC,SELFCBLSELDSKRESBIT ZERODNALVNIT# GETLSA GETAVL SAVEDM GETABN OSMCOM __SDNO "&*.2DIRDSK 0 rv\UD] 9 uk -td|ouLFFCNRAVFCN?RDPFCN[SRSFCNRDMFCNRDDFCN  DOult# JtEuVu4\UD]&G t'u &uS G [&0 tDnt C&$K&C&C&$&C$&:rB&&:u CC&*t Q YuQ$Y, &/CC&05& ,& ÁDj 6 uDO u 0   DnP Zu  \ Cu{ ڊDn& t0ڈCڋ\UC D]&C$ڈC0CB&ڈC0 C&P  X:G rG G  &0PX t4t,Q | Yu  u u 0PXÈ & u P uXDOu: &@t1&&Gt'&gQYt DnP tDn  XDn0ËDUDz -t yËDzDUD|DoD~Dq uDOS\UD]&$?` DVt'RSDU@[Z0&ti _tS\UD] guQ T uG DrB YS؎ K[u4S ˉڋ\UˋD]&&g[:G rg P&'0PX & tƄ Í DnCڋ\UC D]\s `t)r(WSD\T0)s؎ otD  ttDx\ÊD$¶` Ӌu%S *uD tT 3u Ts( au ؋` Q ` EY[ Ìػ`&.`/ 0`/? H`& Gt'Q`V W@u¹ `X`ZS [Y͸ DO= ATNBEL `DOMGROriginUnit DataCodeXCNTRYSETCBFUNLINKSAVCLBLDIRCLRCLB LNKBEG ALLOC DEALOCDOCONIADFFCNoCKDOSTa!`u닜 S Cڻ` ، Dht@GRtjtl @Dj\ltzt|t~LnQ`DnYLnD~D|DzDlDj[t v G ڊLnQ`Dn YLnYu3  *È)u3 @to t%    'ta>`1rZ`#tS`#`%`!u? u: `&t.SP WX G[GS_&[` DlDj|OuQrTtjtl PDj llQ XUHP$ X@Q 1 Ƅ @FCtjtl\j\lTn R`DnƄ `ZTn DlDj`tG*Ê< t<u t `` `  ËDUu Dn`uW`t W` P Pu:` %u Dh  t  @u , - JLh  @u  t  utjtl @Dj\lthα DlDj tO(tCtjtl @Dj\lLn QƄ `Dn YLDlY]X DlDjU a&]Y ú` $`&ú`V9NONFILOriginUnitDataCodeCOMPATCLSAFPFREDRVXTNTRYUnitOrigin USRFCNCPMVERROSFCN Au+` ڌ݋\UD] ` G G ڱt DOÃ`  # `t `S 1[   `t  `t4 / SDnP`DnڱXDnn DlDjQLnQ`Dn YLnYuxϊ`ˀ  Ë *tË t DŽ!Ë t DŽ!SPLMSGOriginUnit\CodeDMSCONSOCONSTCONINICONSI RVNFCNDT1FCNZDT2FCNaDT3FCNSRCFCNCLOFCNROUFCNEXTFCN1 ` `DO\_Ë\UD]&R&G &G [ * P$X$t DO &Gñ [Ë`Ë``)` ` INPLNOriginUnitCodeECHODMSCONINCONOUTINPLN &/C&SC0P <t<< s<t4< t5<t<<t8XP8s&CXP< s@Q^ VY N X[UPRCASSPLERRSpooler error (Ignore, Abort) tPX`"(` t`DSPCHROriginUnitVDataOCodeXTNTRYCNCSFCNSRTFCNPBCFCNoXFRCD CONINICKATTNeCONOIiCONSOmCONSI$ < s< t < t< t<uP XDOÊDU< s(< t < u$``$*`Q Y`  DOÊLU DUtt^u2 t#  @uDhtt 0uÊDh` !uDh u t/gȴ`ÊtLSTTBLOriginUnitqDataLSTDRAEOPCHRDSPPATPTRASTAQUEA3 DEALOCALLOCLNKENDUNLINKLNKBEG GETSDSTICCNTRDYSPHCTPFCN3CRPROCCGETWSBwSMFCN}SNDMSG SIGNALRMFCNRCVMSGWAITLNKPOLISRXITSETDRFDISDSPDSPIFR`ju(`> Gt`:Gs SQ LY[G X` o rKOGG`7wG)OSڻ`> ^[G `P`ڻ` BX`DOX`û`> $` ```RQ` YZù (C` ENADSPDPFCNDELAYRESUMEDLYTIC<GETTOSJSETDDF"a c T` TUt \Q &DOñ *P`U@؎м`T` [ SR [ZYu5QS [C[`TGN`TYOD t/`:Gu2G;tG;u  )ËGGá`u`⻋`t`GڋOډOU ]``f`  uډ wr0G+Gs/>`t؀>``u;`s``⺠``t>`` Y Y GF_HW3R` [0ËTQ\US[ \U \Q q_û`PV `U@u  D7@u DL` b %^Xπd7D7@tL7L7@  D7ud7À`U`UuÀ&`U`x0\Ut\8` u` û`>`f `:Gs rtËGtڋ+rPG++GXr9  ڕ\UD]`fݹ ``COMSUBOriginUnitDataCodeCONOUTSYSDATUndData\L`U@D:\T@lB|DdFTHDJ؎м`T&`U t`` t 7G[`U u# ƻ` \Lx` `U `t ƎDJTHdF|DlBT@L>\`tCodeGETSDSENASUBWARMSTMEMNITHDWNITRCDNIT LCLNIT DSPNIT BFLNIT NETNIT SVCNITDSKNITBMINITRESUME@SYSDSKSYSDATSYSNIT@ .&`t  9`s` r)+` uH` û`)G)ȱS\U \QDOÉ` )s` ` ` ``tW` @@)t/r9`r``ڋ`t`= r GË` BB$0Ë` ` B.`.`ɎَѼ`@`@ TSTPTNDatapCode = 8G 3`$`1 $.   &u  ˊCt PSQR±ZY[XSQRZY[t <t<t0 LIST ;RESUME PREVIOUS LISTING STATUS B)Ӱr;`r ` CCW0Ë\U`W``t5` 9tG;` tWRZ`WR ZW뺋````tHH;` tG` 0ý "uVý  uaý 3tBý  *tODSSUBMITOriginUnitDataZCodeOCNTRYOTNTRYSUBFNSUBMITTENASUB $$$ SUB`tL`t;`ڱ3``u ``RZ  tt`)G`j ڰDODS tDOËG+GG)GAOڋ+G7wG)OS`P`ڻ` X`[Gڻ`>  /DS TUT]`> Gt ;r9r DOà`PG` >``3 LDCOPY VERS 1.0$Source Drive Name $Source On , Then Type Return$Destination Drive Name (Or Return To Reboot) $Destination On , Then Type Return$Permanent Error, Type Return To Ignore$Function Complete$Invalid Drive Name$No Source File On Disk$Source File Read Error$  4''& COPYRIGHT (C) 1981, DIGITAL RESEARCH ؎>] t d>e ueCfMgD\u j|QR\ZY<tIt uúx5o8,A:r&-G#Q< u7R9A*< t8,A:r&~<o< u ;ur;tC ۋVQY^+Ft tº~B< udى}RZúDðg> t 3u PP#]UtP,Њ"s3>3u PP"-"."/"0"1"2P93PPPH]U#s%u]6:Pd' &'sP3t PP͠rP;sjP;t@3ta>3t PP:t >uPUТ& "s PP$6]Áj]U~ r>t:wgs PFPU]UF]Ð{.츀P5PPw>5t@("s P|&=0r -PP(s "PI5r. v?PFPp-;rF6:ӈ ]U~ u>uva28r(*>t  P/~ u]U~t@"s F0P]UFPF$P]U8t@* #)!"%(s *P>5w`P s PPO>+=t >+_tMPX> u?>t52 sP\P$P]@(5-P >u%> uPP#P!'''P66>u :P  P ]U젾s~ tg)sD~ t>>t"<u<:r  P>tP)~ uv~ u)]U~ar ~zwf_F]U~Ar ~ZwN F]U>v PP0므>t!%s>+,t>+ t PP>+,t@%>u>u>u>r> w s PP>t">u">"'w P"u> uPz %sP7UPP]UP. PP*u;r"s>t 67PP* PP$ sCs **> t@ss2<u]ðPPis&s 6]às 6P]UPF$Px]U P P]U PvW]Uv]U4 P4P1]U PP"]U PP]UPv]UPv3]UPv3]U>3u]Ê3ˀ`:u]ðPP3]UPv3]]à]U>tȢ<u/ ])>tƊ6]<u]Â>t%6Is맂>t6s ]]]UFFƊ6u 6:u]U+s;UPP3]UPvo]UPv_3]UPvL3]UPv93]UPv&3]UPP]UPv3]U PP]U PFP]U6]U6]U6]U!Pv]U"Pv]U4 w@"$]À>+t@]U>:t#>us]ðPP6>u"s&>:u@P>u@Y"sWXM:P66}k>t ZRt PP,Ɗ+?u ]U+?,:Fs]Uc++< t@+P]t@Z rAv>+ tİPP뾀>+St>+Qu1+<t@P>+ t@Y r+9+,0< v#+,0< w ݠ&&llXَэ&<PUVN]0102821100654321?]U,0< w]à,A<v PP,A ]UP]UPY ]UPY ]U>t PP>t PP]UtP4 P>3u PPpP>3t}PsUsL>3Yuu<v PP'G$v+]&.<<bG_s9 `s " P P\P \PwuFP GM >uF 3Nu@Y"sP"P3р>3YtPP]&&P+PPPPP" -" ." /" 0 " 1" 2 PsP]U-:P:X%GPb PbGPb PRP^GPb P;Fbs77\PaP'UPP]UPFP ]U Pv]U Pv]UPFP]UPv]UPv]UPv]UPv]UP-s)>@r]á]á;r]Us1-3u>3u%u뷰PPCEOZau!<Na (1/8/82) CP/M-86 PIP VERS 1.1 DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USER NUMBER$INVALID FORMAT$HEX RECORD CHEsd^<v]Pl^^?u Px^PJ^?u\P^!^? td^ ^ Pd]U->@eBeу>@w@"sbBƍPg\P t\PBPfBƀ$uee]U Pdh\P >3u@ P; r@Y"s  ؀>3u>u P\Ps]á @ 3$@PPPPPPrts=2 s&s>uPW#]UCKSUM$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$INVALID HEX DIGIT$CLOSE FILE$UNEXPECTED END OF HEX FILE$INVALID SEPARATOR$NO DIRECTORY SPACE$INVALID FORMAT WITH SPARCE FILE$ =.:;,<> _[]OUTPRNLSTAXOCONAXIINPNULEOFERROR: $ -s.@B눸P>@sesPX\PB ]Uf>uf>f wPSQfÍPfuff:w#À t f,uƇ fu԰fgijgu@i"r uhgP< u@YP< w(Ê t< u.P6u]U?P>3t33$@PPPs ]ư]U:u :u6]U젶:5r ]à6]U+< t]U>+ t]YQUG% + , $$$$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$COPYING -$REQUIRES CP/M-86$CP/M-86 PIP VERSION 1.1$[u@Z"Pɰu@Z"P>h r@P>f r@Z"Z"s@`v{s ffghöֈghvff< wjsiHg[u;fȱÀ ufȢffƇ[gfjg^_`>ftwhh< smÀ>,#s>, u+G$>wƇup,6+js#>,r]À>+*uPw+Ѐ>+:t>,u<G,A<v]6+s>+[uqG% ]>,t]> wi<[uZCu_,hÀEu`hÀPu ^.fhÀ ufh h댠f]UbPm>mw PzPmƍPmunD-LJ PP\P\PuG%^<[u]Àu]À>+[uc^>,u],>+.u- +PDs>, r]À>+*u P{QӀ>+[uG%G ]]U> wF:uu]U,5 >mr@k"sƊmuk֊m/tlkъm/t@"s Snml׀>luksm,0PDY6m2ml>l r@k"mP u@Z"sO`v{s DlDlm]U Pg6Fbs GPbbs\PtPE\Pab]Ѡb"P\Qzt@Y"sѠaȢ<v@"r<ubЊb"P>r@P/t@Y"Y"s%Sƈ6mml녠kr\P P}PDƍPP~PDƍ@PDDƊmD@D1 uonJ-J=sksP\Pl>DFD9Fw, PPFƍPjFs 6mm˷S[먀>u Ƈ$bЊ"s6> u^s GPb6>tP aUPPHPGP[P︀HPƇG>t^sHP]Pn PPoP;oPoPJw@"s6F㍇P\PztkȡJ-J=vFHH;FwÍP~oPG*$u>tcP'-TrNTRу>R $ Press ENTER to continue.$ $ Error reading HELP.HLP index $ Tow@"s6N㍇P \PtȡR-R=vNPP;NwÍPcPFuV<Vo many entries in Index Table Not enough memory $ $ Creating HELP.HLP....$$ HELP DAT HELP.DAT not on current drive $ Too many entries in Index Table Not enough memory $$ HELP HLP Unable to Make HELP.HLP ZVXVrXƀ$uܡXƊ:ts3GP>uPGPoPZ1 uGPPP> wƇ u$ PXƍPPmPZX$ Write error during HELP.HLP Creation $ Write error on file HELP.HLP $ Close error on HELP.DAT $ Close error on HELP.HLP $HELP.HLP created $ Extracting data....$HELP HLP Unable to find file HELP.HLP $HELP DAT Unable to Make Ɗ:sXsPaP]U\Њ"r\ƀ$uF8tFÍPP>t P\ƍPFÍPFFs FF<wÀ t[u HELP.DAT $ Write error on file HELP.DAT $ Unable to Close HELP.HLP $ Unable to Close HELP.DAT $ Extraction complete HELP.DAT created $ Topics available:$ Additional topics available:$ $ $ $ $ HELP.HLP read error $ HELP> $HELP HLP HELPУģ[ȎмSأأ ܜ[СS1\&s\Ɗ:r\ sX\@<P\ƍP}PP\ƍ@P~P\ƊaF]U:Fr@b"sEGP4bbs:w Pu꠮ÍP UTILITY V1.0 At "HELP>" enter topic {,subtopic}... EXAMPLE: HELP> DIR EXAMPLES $HELP Topic:$Not found$ No .HLP file on the default drive $5 0  Z j z B  + ; K [ k { !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%! [ASCII.CHR] 0  C  , < L \ l | D  - = M ] m } !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!1 2 3 4 5 6 7 8 9 A B C D E F 0  0 @ P ` p  E   . > N ^ n ~ F  %!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%! 1   ! 1 A Q a q 2   " 2 B  / ? O _ o  !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!R b r 3   # 3 C S c s  !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!! 4   $ 4 D T d t 5   % 5 E U e u   6   & 6 F V f v 7    ' 7 G W g w 8   ( 8 H X h x  @HHHHHHHHH@ 9  ) 9 I Y i y A  * : J %!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!6 UvvvP6`]U6a^Pv]U6av^P]UvvvP6b\]UFF+9Bvvv6B}FB]UvvPPvo]UHf>f?w-f㋇L>LtLVVfu]UL`*-]U^7. vAv9^G",-=u S|,-F^6,-@$,-@^G" ]U^G"^7h<0r^GP\u PvP>\u P|P^7<u-P^Pv^GP#(uv6y3sv'v(Pq]Uv+P`]UtPt]U츘"Ph]UtP]U츘"P]U츼&P]U(P]U+P>\u PPHJ>Jt6JJ>ctu]Uc1ic1+ʈj>irH]À>k1ujȢjjv P]UFȈFt ]U츘"P]U츼&P]U(P]U+P]U츘"PvgF"Pv"P]U4- 3.->\t \Ȣ.-PVtPP!&PP(PP +PPP]PvP#P]P&PP]P(PkP PZ^w^P ]U>k1u] PhPqP|hPs]U1HDB4PPPp` `,abD`+ȉF]UPPX]UPPI]UPFP8]UPFP%]U PP]U PP]UP]P+P>e tPeP~P P PQ1P1-1-<r@1-÷u1-Q1P u@Y"sÈ1-Ȋ1-ƇQ1.È1-P~PQ1Px2-3-5->m t/>m$t4-!>2-w@P<$u@Y"r5-5-r>2-t|P0-< t>0-Aut"N؜[Ѝ&S COPYRIGHT (C) DIGITAL RESEARCH, 1981 01/25/82 PFP]UPv]U츀PPv]U^Ov]UPv]UPv]UPv]UPvw]UPvg]UPPV]U P P]Uf~u~t ~u ~t]U~r@P~w@Y>0-Hu&>0-Pu( >0-Su +P뷀>0-Fu'TPM0-0-Du w34-2-(j1+k1t3Pz<t4-4-]U>2-t3-0-2-3-0- 0-]UP0-60-_s0-,A^^?v?s4- 4-2-]U6-]UXZYP.AP [s Pb212121<s.$ 'v3s,qs v321y3?PPˊ21.H9>CU*ktY]U ]Ur-"]UFȈFpw3pƋ^@$< uppƋ^@$P'puư.Pp >p wpƋ^@$Ppu]UvY:P Pv`]UFȈF->>-u:-4>>- u<-r!>>- u<-<-6>->>- u>- ;-s 6>->->-]U>2 t@P>2 t@Y se2]UF22Os2]U?-?-s?/2PJs 62VP"Pq 33:lu]à3:muְ]]UPM1-31P31P$1N1{3|3O151]U1P1w>j1uP1OM1]U]UM1g]UnP]UM1~Pq]UB-4PD-4d1@X1y3-9>j1t6IPF]U~0s ~9v@]U~As ~Zv@]Uvsv]U~ t~ u~ s ~~v@]U~ar ~~wn F]UFȈF2@t>2_u?-Fs62i]U;-2@-@-se22<'u@P>2 u@Y"s 62LՀ>2'u'2<'u 622;-&1@-;-&1]UF-P2˷2E-2,D->E-Bu A-B-N>E-Ot>E-Qu A-B-*6$13P 3PPP3P 3P%Pt]U{3"v3s {3v3Fs]U~ uc ~ tcv ]Udedd:FsƋ^ee$?]Uv ^ PƋ^NN t7ÊN :Ou%QNP^ PsF]UFPvFPFP]Ur q>qwb>qur0q㋏F1sF1V>suqƊr^s0q΋^r0qu]UP!Pv6 PPF@P(Pv^G P5]U^GPv.-^]U~u~4>E-Hu A-B-!>E-Du A- B-A- B-D-C-C-C-À20tC-B-8D-sR8-C-:D-wHÊ2E-,0E-< v.E-E-:A-rF-8-A-E-8-C-F-F-s&1]&1'18-(1]UP622P&1Ps&1]Uv3:N^ N뿰] UFF F+9Bv >P^v ^ P@Ƌ^PPBBPB^F BGv ^ PBFQlBFȊF ȉB] UvvP6`vP]UvvP6bRP4s FR]u ~u]UF8.-t.-P]U^G"(-=ui(-7>(-sP^6(-@$P^GP/-t)>/-u^6(-@$(-뿋^PP1밁(-(-^6(-@$/-Fw"/-]U^7L*-*-^;G"s,ƍ@$P,^GPt ^PP6 -<-;-=- PP1P PP2P122 ]U6-=-s=->:-s)&1<-s :-v3]=-<-2 ]222Ps5]62ds]À>2'uw]&1>2!u2 >2;u>2 t?22 <-s=-]]U>2l-]Un-q-]U]UFp-Fo-,.n-sZ]U졚-]U/6/]UP^G+@PST^G@]U///:FsƋ^0Ist/F]U>&1u4///:Fs"(1/ƊP6/T]U//-^P/s^G^G^G/]U//v]U//v]U젆3 Í3-0/Pr0[Pas/s6-* 000]U/]U/]Y0QU0P0P t6]U>&1u 2:Fu]U>&1u2:Fu>2 u]U P]UvsF#~ tJ-~ uJ-v]UF:J-v P]U^?t 7F]UJ-H-nPQ1PPl1PP1, PPH-P/^:u0/F]U^u ^t<]U^w=P^w/YÊ0>0u^^0^G]U~u~u ~u]U>&1u/>'1u(>2:u!(1^^$ c`]U^P^GF^rS0P0P,+Ps/0P 0PTs%0:0u0P 0P]Ps]0G u uO@0G]U>&1u9>'1u2^(1^^?t?t^^?t?u]U^?u0O@^?u"0O0O^?u0O3P$3PPI-]U젌1sI-I-:1w P% P P,I-]U>I-vc]UI-I-1, 8I-r]U~ u'J-,1+ʈNFȈF&1t&^Pf&1^G'1^G(1^GL622P-Ps;6-^P^G0&1u>2t)>2]UGsPq]U>2u>21t6311P2]U츇3Ps!>3u3}3F&3F31 P]Y 0 000QU51.n*61G181L13191D61A181I131;1061E181K131=161C181J131?1*2*F*Z*Zs^ ]U>j1u y3s]à{3s1=>2u2K-L-J-K-P1P2PPz2*K-1u2*K-1*L-tvPQYK-P1P2PP<>2 t%PM->M-wM-2M-u1*L-tPQYL-P1P1PP1Pz]Uy3 M1s s"$^P^G0<t<t<u]QU^P."^G^G31^G81s51 ^G61^Gy^Pz^t^GC1^G$^GJ1sP^O G>2u^P2P2F222^P62@m61 0518131]ð$Ps/ 051081061 031sA,3Ps&>3u361 0518131]s P]U671 0z661 0i6611PK2]UR0000sy30vy300} P621P PP2P21]UM1s H-I-]UM1sApmPP6$13P3P>P7FP3P3P#P]U_-_-_-:\-s/ƋN-V-:v]à_-ƋN-V-:sǰ]ð]U>]-u]à]-1^-\-&^-T !"F""~"]YU(Ps3--<v@ ^PY)Ps%-K[Ps8/s/^P^G^P_s ^P] UPPP"F &1uA>2v:02I0000:2s 23Y]s 63h]ðP`P-V-^-R-X-{.X-R-_-_-<wƋR-P-_-u]ËV-\-ȉT-X-R-]-*^-^-]-a]àUF\-FN-FP->\- s&\-㋇R-T-Ê]-T-]Ud-d-d-Ƌ^8t0]Y`-QUj-%^P7^F uF^PFHP] S#j#u###^PPPP3t+3 t63 636363]ðP0>0w P0uP]UP/]UP$]UP]Ui631v]UA1PI1P;1PP]UC1PJ1P?1PP]UE1PK1P=1P2Ƈ2`-Pe-PIË b-4Pg-P>2 tAP2P"P-NPs6b-l_]Uk-k-k-<sÊ`-:Ru]ð]UN1 M1sy3sy3vD$1]Uw3s ^ ^]U^-C^-FHFÊ-]~u^_ ^P]YU^PPPQhPQQQY"F3t3(s 6.13Pp4]À>3uk73P>3t@Y s P2UvY]Ut-P-,s-r-333:-sÊs-r-r-؊-s-:P33:-w#s-3PR6363{3u԰ Po Pi]U>-vg31t--F-s--]U6p-]U>q-t.Pv-t--]U>21F 2 t@P>2;t@Y ]UsPC]U>21t%3Ps>3u 3^ P|]U>|3u Pe]ø3Pr>3t ]á30>0t |3q]1]U P ]U0O1"M1sM10uYn->q-t-t-Pv-81s 671f661 PZPT641M631Fq-]U>21u8q-:o-t$21uNq-:o-u l-;31t">q-tFo-q-Pv-31t--6p-21P231@31F^G]UPPP&1u,>(1u0u0sM1]À>(1u0]U>|3t |3]ðP#]U{3s P030 P P0PRڀ>2t@P>2:t@Y"P62lY"s2,A0sp>2w@PY r4622P0PI.Ps1<0u:0a>0u>0t@0P:0t@Y ]À>0uEB0GD00˷.86D0]6D0]6D0U<t@]8888]UB0G0G0G$00.9>0t@P>0m>0>0t@]sP>0t@Y ]`]Â>0t@P>0u@0>001PCs";,ԡ(1"1>&1u >"1u]ð]À>"1t]ð]U1]131Bz3w3PPl1P3]U>2 t]ð]U>&1u P:>(1wb6(1,Ӏ>2,t(O>&1uH622P3Ps5 P63oӀ>&1u622P3Ps 63K]j4]U>&>2w@PfY sL"622P&0PPP&0Pؠ0s]600P&0P {{3]UP0]U000:2s2s]ð]Uv3]U츋1P]UP1P]U21.1>&1u?PPl1P؀>2v2622Pt@P>0>0t@B0OPɰt@Y"]&989?9K9^9c9z99]U>0t@]U,1F0,100t]à0:3t0"0000:0s Pk 0蠿0sF0,10]U*1,1s]Ë,1?u]Ë,1]Ux3s,1?u1u-v~u 6(1 >(1v j476(1'>&1u%622P3PEsFPp63ij4]U>&1u%622P3P sv;634j4]U P.ICPC5C9C=CECfҀ>2,u"\622P3Ps 63?]l1P>&1u)]ð Pk]X111UM1s]U1]UN1sN1M11]UM1szN1M1]]UO1]UO1]U0]U000:0sH0PL]U젆30<v00000:s @"x3sm7 PPP.:t4e뙠::::::::::::u:x3s,Ox3]U8Cs-N622P01Psذ P;۰]̰]U01*1]U*10Ê$u@]U03Rj4]UP]U>&1u>(1w|P6(1 Ҁ>2(ueҀ>&1u;622P3P:rF33363Sр>2(u#р>&1u>(1w6(10р>2)tj4]ѡ33À?u >2)uzу3>2,t]i>]U P]UP]U>21t|j43PP]Ux3sF0H00]Uvv]U,1]U,1 Í3*0*0]U000:FsƊN^:u0F]U,17i]U,0,0wQ]U,17bro]Up.0.0wG]U[0000G uPТ00s\03 Í30s0tPN0,P,Psـ>3s03띠0]U0000:3s" Í30ÀuGu0Р0rC000:3s4 Í30Gu0t@PwY"s°]ð]Usj4^.DP; p.G)P'DDDDDDDDD j4s 4P]U>21u3Ej443sj43.sj4J j4s 4P%]UP]UP]UP]UP00w"00w]U,2020G+3140O;61u@P640{<t@Y sP2640>2 u20w2P]U6060G;61tP60G+31P>2 u60w2PQ]U,10u{8080G@uG0"0:0t@x3]UK:0s8s.Zss 1sPWPO]U2u3P2P%3P]Uu30P%3P0P02P0P2P}]UP P}3PM]U>&1tF/111:Fs(11Ɗ1^:uaؠ1]U>21u76u3%3P.1Psy]UP]UP]UP]UP]UP]U>21u=j43sj4>21u j4 4sP y43]U4^m4ȋ^8wQ4^4t@Pvv44QY"s 44Â4u4^u]U:0G0G@u^"0.400&000.$1Т006"00>44440s60]U:0G$00$u@P>0t@Y"]U^G<0O0W0"ш0W"ш0>0u000q0u000Y006.1}3Pǀ>3tc36.1}3PQ6u3%3P.1Pr<6.1}3P1>3uF >3t11sv]U>21u6u3%3P.1Ps z3]ð]U51$ 1F381sN 1 F3613313]U>21t 6.1}3P:]U>544<wÊ:Nt 4u4]U44<w6Ê:Nu<r(4:Fuu >2Bu 4uà4]U>&1t]4>'1u4>'1u44(1@]U>&1u>'1t]á(1@]U3@3cv j44 F33]U33cv0.50$0$ 0,0t0>0u00 0555F$8F0$0 F 0P>0t6<0>0u6=0~]U>0u]Ã><0u]6<0 ]U0@t0t]ð]ð]U,10^60`P]UT>0>0G01t P] ]U+PsTs PPss]622P01Ps]ðP]U PP".?]]])];]M]_]q]à3s]]à3s]]à3s]]ðP]]]] j44F33]U33643P3Ps3?t3643P63>rB363k4Ps]ð]Uv9]Ù>2,u]U>&1u#~u 33>(1w(6(1t~u 3 3.Hj4Q60@P]U00,1? t)7PP6.6wֺ66660]U~tNn~s*Nf>0u@P~w@Y"s Ft000Nf]U,10{,1760Ph]U,10W]@0@0G06060]$]1]l]4]M]i]q]]]]]]]]ðP;]? ???? ?%?*?/?@?Q?b?b?f?n?s?x?}????????????????UFsհPP.@P}0Pr%PgPXPNPp?P Pd*uHH|HHHHHHHH|HHHHHHHH|HHH]U3H3ÀPC]U3H3ÀP,>2,ṵP>2)tj4]]Uv]Uv]U622P3P:32ȉ33Ù>2:tj4F62,17P3]U,10",1P$0XP$0X$ 0F Í3B00>0t%0>0tx 00s 00]U,10>0u ,10B0G0>0u0:0s@0P:0v@Y"]à0:0t@]UB0G0<u]ËB0G$0>sts) %!Ph=@H@S@b@b@l@}@@@]U!1Ps)sPvH!1]U!1sk]U>2 t@?.8AP^]ðP]o]]H]ðAA%A*A/A4A]U&1"1<u]À>"1u >2:u]À>"1t>"1u5622P7 .I Pwj4]ÈIIIIIIIII62.I PAIIIIIˀ>2(u m4]U333n434PPP3P;PdPk4P.PPP4P!4344]U>&1t]622P3P24;           4   N  l    NAEfJNBE SALt STOSWCMP RCLCALLFLDSDIVJNLLESF SARJNO RCR REP  SHL(JMP JNP8VHLT JPO\ STCP} SUB*JNS`b STDhpINTp0 RETz SCASBNOP ROL SHRyMUL_ P˰]U>&1u>2,t]]U4s]s j44]]    0        H*) * ? , T   n        OP ORLOOPNZ SAHFJNGEJZJNLEHXLOCKQ SCASXHXCHG REPE IDIVJMPFh STI|NOT JNZ,MOV RORrLODSBCMPSB4 OUTXOR REPNELOOPEJ RETFhLODS<CMPSDIRET WAITNhPO7? 0<$T%`%Uxb)  )       )  )  & 6 @   P   ` ) p )      PF$IMUL0 RETN` XLATh~INTO~LOOPJMPSJCXZOXas,<nu|NV0@x $4Xr0000LABELSVARIABLESNUMBERS'd A86H86LSTSYM % <==      $  *  9  H   f w  H )  )       )  )      & ) 6 )  V b       )   Oq                     l  ! ( " 7 #    o     )        n         (    F  ? ,z - -   Z-[-Lx"AHALAXBHBLBPBXCHCLCSCXDBDDDHDIDLDSDWDXEQESGEGTIFLELTNEORRBRSRWSISPSS ANDENDEQUMODNOTORGPTRSEGSHLSHRXOR BYTECSEGDBITDSEGENDMESEGLASTLISTRELBRELWSSEGTYPEWORDDWORDEJEC 8  9  :  ; '/?  ?  &?  \wsrv  {4 5 5        .    ( P  ) _  * n  +     TENDIFMODRMSHORTTITLEIFLISTLENGTHNOLISTOFFSETSEGFIXINCLUDESIMFORMNOIFLISTNOSEGFIXPAGESIZECODEMACROPAGEWIDTHUh"?SsKkTILLEGAL FIRST ITEMMISSING PSEUDO INSTRUCTIONILLEGAL PSEUDO INSTRUCTIONDOUBLE DEFINED VARt}|~yuq{ypzx ^                     ( 7  Y j   0  1 IABLEDOUBLE DEFINED LABELUNDEFINED INSTRUCTIONGARBAGE AT END OF LINE - IGNOREDOPERAND(S) MISMATCH INSTRUCTIONILLEGAL INSTRUCTION OPERANDSMISSING INSTRUCTIONUNDEFINED ELEMENT OF EXPRESSIONILLEGAL PSEUDO OPERANDNESTED "IF" ILLEGAL - "IF" IGNOREDILL           h*1* G T t        2  3  SCASWAAADAAAADPUSHFMOVSBWADCjxLODSWADDCMPSWn STOSBzDECAAM REPNZ TESTF{ PUSH REPZ]MOVS STOS"JAJBJCLOOPNE4JEJAEJBELEGAL "IF" OPERAND - "IF" IGNOREDNO MATCHING "IF" FOR "ENDIF"SYMBOL ILLEGALLY FORWARD REFERENCED - NEGLECTEDDOUBLE DEFINED SYMBOL - TREATED AS UNDEFINEDINSTRUCTION NOT IN CODE SEGMENTFILE NAME SYNTAX ERRORNESTED INCLUDE NOT ALLOWEDILLEGAL EXPRESSION  .,  =      $ <L 4 n     EACLCCMCCLDFANDLOOPZAASJGE7 SBBDASCLIJNAJNBNEGaINCJNC$>ESC,JLECBW< MOVSW JNECWD>JPE^JNGJGJL<IN4JO >JP4RLAHFDCALLHJSJ8 ELEMENTMISSING TYPE INFORMATION IN OPERAND(S)LABEL OUT OF RANGEMISSING SEGMENT INFORMATION IN OPERANDERROR IN CODEMACROBUILDING** ERROR NO: ** NEAR: "  YNCP/M ASM86 1.1 SOURCE: PAGEEND OF ASSEMBLY. NUMBER OF ERRORS:  t3F1 ʈ ӈX F1VȻ 1 ]Y"QU   Ȣ t> uذ,P]U X u st "s v ]U  <w3Ƌ^^ ^ȿ 1 1 uv|]U s ^P ^P X1  > t   " : u: s P_ P7kP6  ]U  < w'Ƌ^8?t$:t uҰ]U  . USE FACTOR: CP/M 8086 ASSEMBLER VER 1.1 PARAMETER ERROR NO FILE DISK READ ERROR DISK FULL DIRECTORY FULL CANNOT CLOSE SYMBOL TABLE OVERFLOW USER BREAK. OK(Y/N)? END OF PASS 1 END OF PASS 2 ]UX PPPw_ PPPi^7^G  > w$ s _ P_.  uո_ PX PJv]U^G$ࢧ o/G]UP^OʉRPY"PQ^OʉX ˆGP^']UO AP:P]U] * <s@" sN Ƌ s@ > tFs ƋP 뤋< ]UsE>H u]àH À? s!PZ\Ps$:M u]]U> 26 8 6 < 6 : ]Ur >S =u,+-*/ +-    A86 @      ACDEMRSXBWDSU츐 PFPdP]U^]U$PrPPe(;v!&(+9&w$P&s$]U*P Pm P**GP@*6* P P6* PP@P P P PP P P PPr <u K ]Â> tVs, PPJ u]U P P Pc P\ PU]U^.66 O \ %6 g k 6 O { 6 g  P P -]U >  ѡ> ;4r@"s66 > ]UPPv P PPpRW P PzPfP? Pi Pb PNP' PQ]U6*P:P]U*GF]U~M" P 6M Jj9* P > w Ƈ  u踀 PI P>H t(H 4> 4>4w 6 ;r P H> > 6 < wƋ6  u8 < > ㉇6]U?r  < wƋ":u6  uۋG $ ㋏6SGPQ"G Y[6hhPXَэ&T Pp+ɋUVN]0102821100654321 ,t,s 6 ., ]U    :FwJ  > w' Ƌ^ :S t   uҠ s  u]U PP u>P]Ë? s : ]U>4w@ >@ u@ D 49D wۋD ㋇8> X6 D ㋇6> B  < wSƋ 6 $ :sD ㋇6B 868@ : v  uD reI]U  p<0w@UAO M <0t@N Qs6 ]À>T :u+S ,AP;3s ]À>S =uS!]]zs( ]UPP]UPFP]U P]UFȈF u > u|> unp> u d Ȣ ࢿ rX @ PPȢ  Ȣ r = P]U^?:t 7F:P]U   > wF   s K s   T P Pq6M K s  P Ph s+ PZ3 PS@ @ ;4rMË6> 766 4\\K s\P{!\PPJ> 6'P> ㋇61PX1 t< 7]UsPP PT]U PW PQ]Uvv]U PPB]UPP3]UFO QP]UPv H ]UPvH ]UPPH ]UPP]UPv]UPP]UPP]UPv P8 P  @ P .  u]U= PtF P\ P P\ PUl P P P > wU  P P  r%> w P  @ P uF]UN sP P6O AP P| 'P< kPn~ P : '8 7Pb^ Ps; ? PkERP, PwsOWP( sB sXP PAPdP1P[P2PRP3PIP4P@66 @ 'PC Pb6 6'PkP6'P]U@]U PP]U PFPr]U#Pvb]U.PFPO]U}P?, <s]ðP(,]Uv]UFHFt F^F]UW < uW > [uW  S P PPW <v>O t O ..sOWP, P[P{]Ul0 >0t0s 6 .0 ]UGL s > u]ðP >  2 PP6>  P =w@ s 4\ @ ;4sH> 66 } P P:> tJ P P#6 S@ ]UF >O t O F %P6F ]U, PP <uR\ > ut \ P]øk P]ø Pv츼 Pon P]UU P\ Pv]U PP~ <t<[t<=u W ƇW tW ]U> s F S  ]UG>S =t]9]U/>S u%>S u]ð]U F tIF1 F1VȻ 1F t> u s 0P]U ' h?j?I PZ>H t,H $ s> 6cʠ s#>4u M P]àL s x]]UFȈF w%> u.P Ƌ^$P u]UFƋ6 s]Uvs8 uo]À> u]]UVtʺٹsB]hU1PP/]U   @ &?uP] &]hUF &]UF &@&]UPP  P ]?  Уģ[ȎмSأأ ܜ[СSf m t {  Drive Read Only (RO)Read Write (RW)System (Sys)Directory (Dir) Directory Entriesd:filename.typ Use: STAT Invalid Assignment set to 128 Byte Record[ro] [rw] [sy0  s] or [dir]CON:AXI:AXO:LST:DEV:VAL:USR:DSK:RO RW SYS DIR SIZETTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1: ** Aborted **User : Drive Characteristics CapacityKilobyte Drive Capacity32 ByteCheckeds / Directory Entrys / [AUXCG.CHR] 0  Blocks / TrackReserved TracksActive Active Files: is STAT 2.2Read Only Disk: d:=ROSet Attribute: Disk Status : DSK: d:DSK:User Status : USR: d:USR:Iobyte Assign: =, Free Space: Bad Directory on Space Allocation Conflict:[size] Too Many1 2 3 4 5 6 7 8 9 A B C D E F 0  0 @ P ` p  Files Size Recs Bytes FCBs Attributes NameSysDirTotal:, File Not FoundDisk Reset Deniedd:=RO 1   ! 1 A Q a q 2   " 2 B R b r 3   # 3 C S c s  4   $ 4 D T d t 5   % 5 E U e u 9  6   & 6 F V f v 7    ' 7 G W g w 8   ( 8 H X h x  @HHHHHHHHH@ 9  ) 9 I Y i y A  * : J %!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!Z j z B  + ; K [ k { !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%! C  , < L \ l | D  - = M ] m } !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!! E   . > N ^ n ~ F  %!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%! / ? O _ o  !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%! !!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!%!!!" " 9 9P,Y9PP>Zu PzQ t3 ƇƇ$> t,  ø9P>Zu P(]U2H2Ê]ÎӍ&0.6$@6 001 $$$$ SUBBB.[.&YۜX9PV> 3 ȜX.[.&YP.Y.[.[..YUVN]U]U Pv]UPvZ]UPvZ]UPv]UPv]UPv]UPvpZ]UFȈFZuF))"$"* P]U>v\P&t]ȴÊ< u&66<9v6055<9v 504,a<s&_]U9Pt@ P ]U2  r T <u@P> u@Y"r> t׀> $uI$ <$te ,0 < vz D > t  `rWs6 뇀> ^u,A <v PS P6 jπ> t@ 6 T2]U [ < t@P> t@Y s ]ð]U [ u ]U2@2=vQ PF2 <}vi P]U: COUNTRY DATCOUNTRY CHR  copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Command Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$УI)ģK)[ȎмI)S un'p'2 r' m'n'@p'v%r'n%m'k'l'u=l'ɵ\<t $Q Y[IICCV'X'V'6X'؎`'ul'_&$l'tk'^'_'l'<uKT'H>T'~Ap'&5J'>m't&EJ'6L'&G&GZ'Z';Pt-R؊O>L'6J'&M:j'vj'Z'ʡJ'>L'j'&J؎>R'QYZ'n'>r'&P'>m'un'N'&EN'Z';t2ûءN'>P'0&:tG&EZ'Ÿ_Y^' &Y[I)СK)S$G ӱbúHYM<túF:\'\'=At(=tHJб$<tá\'@\'аñút' k'<tȴ'7' w' ))<u GGG0G<0r<9wҀ0r̀9wȹh') ^'_'ø '‰F: DEF $ ;  $ COUNTRY VER 1.12 * * * COUNTRY SELECT * * * 1 :   2 :   3 :   4 :   5 :   6 :   7 :   8 :  [ZȎмRܻGP$*6 X*6 GP<tgX$a,>xr19FF~'0@ú+%>tQ+3Ɋ FQYYñ  ÊFV"^ ù R  ZQYñ ' )3($mà(<uX)3ɊȊ< t WFI-<,t <0t< t(ML<0M 9 :   KEY IN NUMBER OF COUNTRY (1-16) : $ COUNTRY.DAT I/O ERROR $ COUNTRY.CHR I/O ERROR $ 20P-X$'-G7UG.LG%0бSQR  ZY[QRSP0бXP$0X[ZYRQS:[YZQRSCCC C CY[ZYJANUARY $FEBRUARY $MARCH $APRIL $MAY $JUNE $JULY $AUGUST $SEPTEMBER $OCTOBERtX&FIFIЀ>tFI-<,t <0t< t(<tXk&FIFIЀ>tFI$<,t< tv<tX*&FIFID<0t:< tAD<tX& < uFI t 1t2tFI뵀>tFI먉 $NOVEMBER $DECEMBER $SUNDAY $MONDAY $TUESDAY $WEDNESDAY $THURSDAY $FRIDAY $SATURDAY $4=GNUZ`fny6t-%:u/FGI!u<,t < uFIFI%2ðÀt62GG벱 3Ҋ6    >túþ(33ɊȬ<[t&< t t uKu =O]t =o]tX)(RZrXz4d'<t (tr N>t⺝3Ɉ tȬ< u NQ)Y( ?); [4M  THIS IS YOUR DISPLAYABLE CHARACTER SET ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz / ? < > , . : ; " ! @ # % & * ( ) _ - + = ~ ` 0 1 2 3 4 5 6 7 8 9 $XێӼ&P؎M  E W5h$[>5l$< jˆu+һjjjujutHj;6gu$j:huj;huj:hu u:htWuthu<tlj6gjhjhjhuhuthu<t5uu%?>jj@uۄu .u>uuuu þ ot .>>1.ZY*].^.......6.>...&...F.F.F.Ȏ؎мkt.I.t.IuZ=I.&Jt J`f?.FtvHt..6&;u)6''tI9. t)%..6&ttt tJ.[X[YZ.]^_...&.6.6.6< t <,t< t<:,0< r <s< rFZ~Gu;mt PXGttXZSQR ttIuwuZY[ËȰ42@2v/f++22*6P'2+2u4u2u X$X02+2uu *r$0i*2u$4 T!f:frûf2'#f r g5JK E COPYRIGHT (C) 1981, DIGITAL RESEARCH DDT86 1. 01/25/82 ABCDSBSDCDSEIODITSZAPC CDES&&8uW_m%@9+ۊEt ش t <:t < u D#BB >hr93@36g3ۊ㋇faa3**#f@tgg33f1#f15#fg7ágfg#f.%.%.%tC.&%jjv%*يtjh*uىuuGhdPssR t~@tjuPj@ÈjipXuXXXX CANNOT CLOS INSUFFICIENT MEMOR NO SPAC MEMORY REQUEST DENIE NO FIL START EN VERIFY ERROR AT DISK WRITE ERROҠ*+عþ t<@v@ȿ K &..&X%&k.мkt\ u(f.hB>D@BuȁD볺\KMfDءOQ+rPh\xqtu u8\|DBBw\S.hrBuDt!&X6Z6X;XvX&\V`< tQ+\rK^dbt;?t3uko>ju uujujٱufkmjhԊj@Èxi`iju uu*䠺u$u*jQj>j[tri t%*D@h>ut7utou:}<0r>qo-s!8< t<;t,Ar<wlm.;??/ `   [ .L0ñññ ñ ñ tþptþa uþHt< u;6\&6b&:t\%b\\9`rbt=&P^Xl^ ptmu !<, ^u ; s > >&6  Fr +:t ; v 6& uuuthIuu>ut#uhhB<t=!ut3u>ut,t#%jj*ju jhÀ>ut4u9-35t ñ8zþ9k;f@tþ|UFY]U]úQ þ6e u e\vjf\SZ\`nEr.ع0\ `mu u%`+\r>\)\Mr \;`v..l< t+).>ut->uu&!uuuhuhfkjhÃtڊCÉjÉjûm>uuAjhj1P6j>jjX>utuukjQ>uuGj6j>j؎jhj<u>utuukj#uuuX$'@'W*$_>G"K>.t`9_(< t< t<:u,@Oÿ <*uWQY_t 㴪I? Ë>G ?ùM +щUù g +щUùQKYA rþpȸ'P'X< t,< u,I..F SXPSPNXY[X+6\< ul+< tA&>nEu\.&9tl7lZ31< 3Zts785>1;>5w*W_3uu@u@>utuu4uuuuuuuuuuuut=Ȉuu:u/u;uu&uu:u&u:ruuuu>utuu>ur4usuut]j:hu>j:hu5h:ju,u:uu#>utu.!. þgøp .#0t1qþg4Xu-^ùS S )sQ CYA:SrþuþM2Tu w SS s QYA:Sr..69tVTt &Wv;1r17t8u;\`< t:+\r4^dbb< u$6\&>b\tbt \;`v< tP\tD< u@\0hfyf}-jf~<^Z+ 1nR\>\ 6\h< t<.t#Juu<ttutu<tjhjhjhuuut7u>ut uɺZrhjhj'u<ujuu%j>jj@uu$QuɀtmYu؎j>uuu uu$áu+һ=r-Êȳrجд t0SRPyQq^|q[X Î_á.....Z^&t-&.Z& t. t.&.+.15&E&+Ɋ&'P_&ot¿ȫ ȫ= mu u>\\s>HH:j->>`"$PXPdX>wt<rá<M:K@Q>O< tC\8t7< u >nRu, ZMK< tMQO&#:Pj6]U]U s H]=]U s %]]Uu| ]Ud sP[]VP]U; 8 sP]ð1P]U< &$ 6 < u 1\Jpupuq}#oPWcKXu[@zT< tW< tj&W &< uUUU <.tnq< u) tUÀuZ u^U>U r{WUU+I]UPv6 ]U \]U > v ] s6 -]"6 ]Uy{ ]U> u ]Z6 R]U> u ]7 4]U!   P]U > u U P P]U6]U?P]U5P]U86"%6 uX]?]U ]U  > u( ㋇6 Ƌ @ > w  . D?:50++1&7!=CIR tz{vql g2bE]VXSNID?:^:t FFܰ]UM6>M6wM65:FuM6u]UF,0< v@NAPv@Y ]UF,0< vF,A ]U5N66>6u6665È6 r66Ts,>6u 66]6N6s6]6]àN6s6 =.,:;[]<> 1&@Osp  %*/49>CHMRW\afkpuz s]UF &Ê  s q Ѐ> u ][]??= $WORD $BYTE $FVfv HOPHOHODE@AI6Ds5R66UY 5N6t]UR>5 t>5 t]]UO6F8O6w 5^;u O6^ FO6uհ]U츰5PP5GP]U츴5PP5GP]U츽 PP5Ps 5G]ð]U츭 PP5GP\s15G5G 5U,P]U^?$t 7F]U~ v F, AF0P]UFPF$P]UFPFP]JGDE@AIJGf=;:SR##Qj)Wa    a?  a    a?H H H H HHa?     O O O O OOP P P P PPK     ########aaaaaaaa?????uG5G5G ]ð]U츝 PP5GPs15G5G 5uG5G5G ]ð]U>6u0>5BYu 5G >5WOu5G 5 t]ð]UP>6:t@Y"]UFB6?6B6]UC6s5 &PC6U"P&7]U&P" &GP袐 XP$ X$ XP$ X$ ]U젗 s*0P]UFF7@7]U츭 Pv]U츝 Pv]U젗 svv]Uv+Pv]U???0+ 3& 21/(f f h h 9 9 9 9 979?<hhhhhhhj gs`e]9 9 9 9 qrklffxymnvw9999999999999999C C8699d d$ $TU i!!!!!5G]U>6u>5 u5G ]s8s5 tdË5G G ]]U5G s?5:5u5G *F5G?>5+u *F5G *F5Gs 5:5t]U5G5G5G5G5G5G  sP]ðP]U츽 PvY]U&7]U&7]U젗 s]]U&s & &Pa]U&!!!zo_V>>Q)W X>>^tB"LNM) y INJAJBJCJEJGJLJOJPJSJZORAAAAADAAMAASADCADDANDCBWCLCCLDCLICMCCMPCS:CWDDAADASDECDIVDS:ES:ESCHLTINCINTJAEJBEJGEJLEJMPJNAJNBJNCJNEJNGJNLJNOJNPJNSJNZJPEJPOLDSLEALESMOV5G 5G 5G 5G 5G s]zs]s]s]À>6u]55G6:5u >6:u.55G>6t55G5G ]Ë5G]à5:5t>6u-55G5:5u5G5G ]]ðPd]U5 u 6 ]à sL> u > u]À> u!> u &?t &7> u&76  .+P PPN$P '6!]U젔 s6 ,P],P6 ]U  MULNEGNOPNOTOUTPOPRCLRCRREPRETROLRORSALSARSBBSHLSHRSS:STCSTDSTISUBXORCALLIDIVIMULINTOIRETJCXZJMPFJMPSJNAEJNBEJNGEJNLELAHFLOCKLOOPPOPFPUSHREPEREPZRETFSAHFTESTWAITXCHGXLATCALLFCMPSBCMPSWLODSBLODSWLOOPELOOPZMOVSBMOVSWPUSHFREPNEREPNZSCASBSCASWSTOSBSTOSWLOOPNEL6}>5,t]U5,65G s]U>5 ts]U55r-5=w%Ê3:J6u劏3I63K63G6]/]U6,<v6㋇5P66 8P6w<5P5P66!s6P6 J6]à65P6u]U : r  S^ * &  > w$ : w79 P- u]U]U& u s] ]U`6 ]U&" A6 ^]U2]U']U]UC]UK]U3P]UOOPNZ E QjzAXCXDXBXSPBPSIDIALCLDLBLAHCHDHBHESCSSSDS= B6E6D6C6>5 t>5.u]sPs>>I6uD6seD6>I6uE6sME66K6X랰]8]U65v5]UQ6B6ȢB6'6w%6 6P]K6(]qs K6]W]UF55'65|:P65o P56mr>I6vI6.3,> Vzup$k*f0ao\WR MVH8RURUX:VsVXWUU:Xv8E Kp uR>ur pPy> u Kp t PR[6Ls^P. @P% > u rς>u%> rU> uU$*UU> uo > u U5v F6L6]F6L6]UL65G5_˷.S+F65GzF6H6L6]Ë58GuF6H6L65]F6H6]F65G/F6X5*GJE5GOH6]****++&+4+9+UF55F6G6C>19f4_/+30353:3?3D3I3N3S3X3]3b3g3l3q3v3{333333E5] 7   ?   Q j 8kl'/! "RS#$ TUw%sr&vrVt'}|(~) W P W~>tU"rOP=s \Pa>RunAPss2s PcPAPMabAP<tSAP3QPs,P< ;sP=PP>-u H6Pk>L6t5P]>L6v 5PM]UF5ÊO s$ usF5 G K6FG6vD]U26"76sFK6FG6,6PV]U.>'6w 6G6,686K6-6G66P!]U ]U>'6w $6sK6]U=6P%6s =6X*vYr+sZw,s-u.~[|/}\0q1{2y3upz4z5{ x t]678^mn_oz{p9qr:;<= >?`as@ABbtucCdDEeFGH vwI6>#u$6s>:u%L>:u>uPs>Bu*$& >Cu$>Du >Ku8z>Lun>Pu!s asNu>Tt{>Uu>t@)>VuCs"Pr]U=6PfK6$<u =6PT]U>%6u >=6vq>%6u>=6r%6]i]UT]U|6Pnr]U>:6w F 86F %6K6]U36"!6]U36"$6]U76"$6P>'6w@P>:6w@Y"Y"]U.56s]]U56JLMNxyO (fghiP 0BXBPSIDI,:+ [] ambiguous operand$H@XP+ P /P 6 #=>t@sVxVq> u>uc>u\ZHQ>t@P8Y r>Au5 $&s( s@>Funsw>Ju}X|sUȢ:sÊs Pl]]U5~=6+ȁw36s5@=6+Q5]d]U$6s=>-6u26sK6>=6t@"36s&6K66G66P]]Uq6K66G6,6P~]U?W>:6v76"6s]]U516sK6Ê5 -6P]ðP_ <66s* +ȉ$6<6뒀>MuC>u<>uJ0 ˈ< u7>NuQsP6ssm$a";rN빀>Su?2_ s8K65,6P]U06sK6,6 5R16sK6Ê5 -6Pr]àK655]U]U>,6u 06s]]U^vs K6Ms7K6~ u'>=6r>=6rK6N6P#}s]UWXَэ&DPUVN]0102821102654321 +Qi:s۴Ê_>WuW>XtAPG sAPfQ"sp2 PAPcPocP>Yu $>>;&wp>s.>Zu s 0<u~ s P]U P]U36s"K655=6+Q]ðPK65]U>=6w%36s>=6uPJ]ðPB=6P]]Uay>*6@s&76" 6s*6PK6X$G6,6P ]]U5,656s K6 P]à36s 6=6].DD (-p H  ;v P +H+ȉ+ȉ ƇpK\>St(<0u PlP P >] u%P \PsC (<0uP &T\:u <s}>t3UPPp]UPPa]UPPR]URr PFP:]U~ rU~ uUv]U>Uu]ðP PP.U]U~ t@U*"ЈsF :w vu]U~ r$F< t@P~ ]U!6s>-6u16sK6  %6P]Á>=6w36s p=6P+]Z]U>6u6sR6>*6w 6sR6$46sR6 K6 86P>R6u*6P]US66s K656=66;6]ðPK65r]UPz P >Yt7P* dp  "UD#5D?)D>DF* F*DRTP6\P6|>*t Po6**DhEEPjsHPZsF\Pt@Y P~ t@Y ]Uvs ^PsF@vi]U P P]U Pv7]Uv]U Pv]UPv'6t06"$6sK6,6G66P]À>:6u76"!6s%6 K66=6!>'6u46"$6s<s\\P=P PP\Pk <>It:[t@P>t@Y"s$W Kp urt<t<t<u3>u>u uU:Vv>unUWt P W:Vv> UPvY]UPvo]UZZP9]U PPMsPP?<u]ð]UPP&]UPFP]UPv]UPv]UFȈF t<u٠<sP#P=PrF< toP ]U츀P8]U>brAPt]bbbȴ']Uhj|(<0u Pa\P(<0u,PGYu<sP; P!PLP&PQ>Yu>TtT &PK&: ]U]U>t@]U]Us]ð]U>u 042"0 LIBX$$$$$$$LIBUU: wB P`\PYt>Yv 6   u]U ]U ;r6 <t ]U<s/;s(POP2PPLP >Yt]ð]UHu 0$ H "@$0@&]U]U]U ]U"]U H Àp u]U"]U>u5";&X$$$$$$$LIB$$$BAKtrPBu]U]U;rF 6]U>r0ocPztr߸cPF]U>w PucP]U Ȣu#"&; v$]á +$]á $+"9r"&]U ;"r^sP*<ucPwcPu'>wu]u]UtPtPJ>YuSs$P<s\P-lPOPE\PP*P=P,P]UPvNQ]U>uv7]U~as@P~zv@Y"]]à p> u]]UsvuF]U";rf]x"pP> uD]]U$Fs+"9r']U$"&ss~";&s]U]U;sx<t 68B COPYRIGHT (C) 1981, DIGITAL RESEARCH 12/81Invalid Filename$DIRECTORY FULL$DISK FULL$  ,.=:<>_[]*?Error Creating Password$Password ? $CannoUvsF$_F]UP2 P PP>wZP< r  > t8>t>u>rȢƇ  부>uxu]U~uFsvCF]U,', tDF1F1VȻ 1,]U ;"u< p> u]Uf<t@P> t@"Y ]Us#> u   >u]U_Èdr]U"8ѡ89w@"sF8@&8F_6&:pt@P:^t@t Edit Wildcard Filename$FILE IS READ/ONLY$File not Found$NEW FILE$-(Y/N)?$NO MEMORY$Filename Required$Output File Exists, Erase It$BREAK "$" AT $>us0P빰 ]Ur#v:P Ps *P]U6]U>t]]UtÈ]ð ]U>tt uqȴ s:PzsC>UuY"s&ʠs&<]U%]UP6_s]Uv+^ uPIP S+^ u PAPCS]UP]U,>u  $::Kp< u >Ut _$::;&w.> us";r P ?*P PU:[t@s Ƈ\ ȴ\>]UsP]Y.QU> t>u. PPP.@P P P> usms>wmuu>:u#>3s,:pP:s]U]U]U]U"@&;t>$u6]]U>ws txuu]U]Us ;r]U  ]U>WuuW.G,A<wF.G I>.u:Ts> w$늀>wr]øoP]UƊ.]U> w.>?t>*uP:u]u˰]UP\PP]UPs,< w Ê\:t> uj]U66~ ]UT]U:Ft@P>[t@Y"P>t@Y"]Uvs5v PPPb>Nu >Yuϰ]U,0@< v@]Us@> ? XێӼ P H5` u f +!] W B  88 # Q6@f6{Yt6;whtús؎* SOFT KEY DEFINITION TABLE ************************ $FD READ ERROR $FD WRITE ERROR $CPM.SAV$ HAS ALREADY EXISTED ! ERASE $MEMORY NOT AVAILABLE $ = $ FNC PF$ PF$CPM KEY START ? (Y/N) $ NOW LOADING $ FILE $INP uuZ;/u&<)t@`%L`ft\32w<`r<{s, Êú],u  L`PXu^et޻h}6S6t6L ;ult:u0:[t'.$H\l ^e7t+\(] \$FIuñ\z\] b az {< t FCu.C< tFCuKHs "ub ({ a@ ? QȢQ̴Q!عôQ6!j*Q໅ؾ 6Q!>á, ~aQM{áȣ~G/%QpY2l[>2h.AUXILIARY CHARACTER GENERATION PROGRAM V1.1 $ START ? (Y/N) $ NOW LOADING $ ~Yŀ:tu!õA(SQ&6:t%.+Y[Cu%$ظ;uð  ջl BIT OFF SP BIT ON * CURSOR HOME HOME @ A HF..SQPXYu$< w07б)!W3 P W The File CPM.SYS Not Found On This Disk$ Error In Reading CPM.SYS$ Segment Address = $ Last Offset = $ $%CPM SYS*VË Ë$;rBR+ӋZñW=sQOW.Yt :t s_È3(**~ûC:uûË9Cds䠦$QYV u QYLQZuR>JtQSQCS t7;r[CYҋ7Cˋ0C;0E$beMt;?t:u C,$uȢrѠFwQ.6""*$YËYFeuYtȎмY&_tUWV]^_]]&ωH2_u$utهڋٱ>Jt u u:uGڋ;u3BCBCu¹هً:rهيC2C\t $t6""Ct $tuDt 2!"1GDtP:NMKLS)r 6rÊٷ.v<uUpSgArfcY_kPQ_`266>YXQ!Q$YPQ`2>>YX  û u%? rPX< t< t < t<t< à urut vZ"S[urg"_"HaGt ga`K$ȢH<sLM$À>a`uu3ۉ "N{->t db$t <u <t2à uQYQYQ>tY<t< s t<u< uÊ{s P^Y@ u $u #:s u n i<$tAQY&CSQS[Y< u< t<u t͠<bub>dtcKa`nnpt[>a`uG $uaL??t??t' PË"\0 ÉÀ>Kt$>a`uOM t LHc>_uQ<u t&K|<u QS<u<u[:sG<uK[~<u5Q?Y[SQ tC&QS[YS t* uC&QS[Y&<u <u؎m:s,[&/ ؎bD ?t uLD0? u0!  ËÎBdos Err On : $Bad Sectorð  ˻'QYÊ[ tP$&(ډA**,28J t 3&ËR E t߻oRWR62Rȋ6& ? YA 4P$Select$File R/O$CP/M-86 3ȎЎ؎JtًȵRËR Ê4RTP"5 ؉RË úPڊN6"OG<u2PڠNù*2CQY á $Ë  9B$ ڊs t*A P<aa2FQQz(<>stȎЎ؎V.>uJu gg>ggggGgGg%"gtg t $`<@u* ù,64gsg2gAAN`gQYF Dg*iàh 0fhPhàh h!gP&ghȢgAgPģ"g gX$ggg&=g&Cg*H'g$goû g t$`<@uĀt*uH<tHJÀ>tHðàÈÊtCÈ <s %àVT <t[$u< u$É% ÈÃt ڊCÉÉû *CI* u"䖨t*)g닟h u*g+=> gtQQ@䢨 uYY9YYSICC> gt梊[> gtQ䢨tY Y)g*䒀> gt 䢨uQ䖨uYY䒨t4gg84g5h+> gt 䢨uôs:Lu:NuM:u :uDLMNɺy~OJ/<t'%>@ÈGر رgeGYGZW<uM: 䖨t4g'h2g*g> gt 䢨 t䠪> gt 䢨u*Ê曋G棊棋G擊擰@؎2 [g&%u &u e>euut uɺZrhm&mtSjhj6jjlMjuuAlkQ.ms@ƀǀYmjjhÈGر jرjjhhhhGhhS<tjjjj: h":&XiYi%u&Ziu>ju.>%unh>hrwh>hs hG$hh<u&hW>jt>jth>hsK/Yju"hh jhG$ GjhG$ GÊXiiYiiZi#ihZ÷ñ늟h؀hGPuFPsrRÿXiP@sRssáh h;g*6g9;gr ;g8g:ghhh &g:gtY8g:g@g*gg(CgAg9Agt>Cgv/g.CgAgOOOPOQOROSOT9Agu@g>gAg9Agt Cgg(Cgtxg tn$`<@t Āt#u>Cgt뒀>$gu.>%t6$h>ht*h>ht%go t$`<@uĀth g u?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"#$&0'`()*+ -P./013@4p56790:`;0000=C=CEE?)@@9@ B B LGPH(@   j*k+m-n.o/p0q1r2s3t4u5v6w7x8y9 ?  @DH `$d(h11!`@n@|@@@B @IAJBKCLDE1B1P1bP@ gHHHHHHHH _ P0 HDC H/W ERROR CMD = H STR = H  #TITLE "NEC-APC Smart Screen Driver Interface" #SUBTTL "For the TurboDOS operating system" #PAGE 132,66 ; ; SCRAPC.A ; ; Version date: 8/18/84 ; ; Edit History: ; 7/12/84 dds Module Created. ; 8/18/84 dds Added cursor delayed enable featu!22@̢@33##44$$55%%66͛77&ԥ&88*գ*99( ֭(00) ܮ)_-_ _-=+ +@`~ ~QqQQWwWWEeEERrRRTtTTYyYYUuUUIiIIOoOOPpPP[[{{]]}}\\||^^^AaAASsSSDdDDFfFFGgGGHhH EST = H PHN = H LCNH = H LCNL = H LHN = H LSN = H SCNT = HIST = H UST1 = H UST2 = H *** Hard Disk Unit : is Not Available *** re ; MODULE "SCRAPC" ; module ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; common NEC-APC equivalences ; ; Some screen parameters ; NMBROWS == 26 ; number of user rows NMBCOLS == 80 ; number of user columns HJjJJKkKKLlLL:;::;'""ZzZZXxXXCcCCVvVVBbBBNnNNMmMM,,<<..>>//??CP/M-86 1.1 (1.107:015;D) CAP ALT GR1 GR2 sp:9 / / : SunMonTueWedThuFriSatd UoUkU`UUUUQUQUQUUQUQUUQUQU0  I8ERR0123456789ABCDEF FDC H/W ERROR STATUS 0 = 00H STATUS 1 = 00H STATUS 2 = 00H Type R(Retry) , I(Ignore) , Any Key(Cancel) *** Floppy Disk Drive 0: is No STATROW == 25 ; status row CSRCNT == 2 ; delay in ticks for cursor displaying ; ATTROFF == 0X1000 ; attribute memory offset constant ; ; GDC status register definition ; DR == 1<<0 ; data ready in FIFO FF == 1<<1 ; FIFO full FE == 1<<2 t Ready *** Type R(Retry) , Any Key(Cancel) *** The List Device is Not Ready *** Type R(Retry) , Any Key(Cancel) *** Floppy Disk Drive 0: is Write Protected *** *** Hard disk unit [ , , , ] cylinder read error *** Hard disk unit is not def ; FIFO empty DW == 1<<3 ; drawing in progress DMA == 1<<4 ; DMA execute VS == 1<<5 ; vertical sync active HB == 1<<6 ; horizontal blank active ; ; GDC commands ; RESET == 0X00 ; reset controller SYNC == 0X0E ; SYNC format specify VS  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ @` @``38 8 8 8 993 99[f4(3=3$49894Av5B5C5D5J+6K7Oa7Pa7m 5M 5>b7lh7Lh7fsined at the configuration Please reboot from floppydisk . NEC Advanced Personal Computer CP/M-86 Version 1.1 Copyright (C) , Digital Research , Inc. Interrupt Trap Halt YNC == 0X6E ; vertical SYNC mode CCHAR == 0X4B ; cursor and char characteristics START == 0X6B ; start display and end idle mode BCTRL == 0X0C ; display blanking control ZOOM == 0X46 ; zoom factor control CURS == 0X49 ; cursor position spe7hs7Hs794140 4B430R81V82Z83b cify PRAM == 0X70 ; parameter RAM load PITCH == 0X47 ; pitch specification WDAT == 0X20 ; write DATA into display memory MASK == 0X4A ; mask register load FIGS == 0X4C ; figure drawing parameters specify FIGD == 0X6C ; figure draw start B RDAT == 0XA0 ; data read commands CURD == 0XE0 ; cursor address read DMAR == 0XA4 ; DMA read request DMAW == 0X24 ; DMA write request ; ; LOC Data# ; locate in data segment ; ; User defined tab size. ; NOTE: Set to desired tab size 2 thsequence branch table. ; ETBLXEC == . ; base of execution table WORD SETXY ; #1 direct cursor addressing WORD CUPSCR ; #2 clear unprotected WORD CUPEOL ; #3 clear end of line WORD CUPEOP ; #4 clear end of page WORD BEGCOLOR ; #5  FIGS,CRT_CMD BYTE 0X02,CRT_PARM FIGSP2: BYTE 0X00,CRT_PARM FIGSP3: BYTE 0X00,CRT_PARM FIGSCLN == (.-FIGSCMD)/2 ; ; LOC Code# ; locate in code segment ; ; Screen entry point. Output char passed in CL register. ; SCREEN:: PUSH SI PUSH DIrough 16. ; TABSIZ::BYTE 8 ; default tab size ; ; User defined start up cursor mode. ; NOTE: 0 = non-displayed, 1&2 = blinking block, 3&4= blinking underline. ; CURSOR::BYTE 2 ; default cursor mode ; ; User defined status line enable. ; NOTE: set terminal attribute ; ; NITCMD: BYTE __LEN ; CRT initialization command BYTE SYNC|0X01,CRT_CMD ; Character display mode '0': no BYTE 0X10,CRT_PARM ; interlace, flashless drawing, static BYTE 0X4E,CRT_PARM ; RAM, 80 character per row. BYT ; save regs PUSH CX ; save output char MOV BX,&SMXSPH ; get exclusion semaphore addr CALL WAIT# ; dispatch if neccessary POP CX ; restore output char CALL __SCR ; call the driver MOV BX,&SMXSPH ; get exclusion semaphore addr CALL Set to 0XFF for enable and 0 for disable. ; SLFLAG::BYTE 0XFF ; default status line enable ; FLAGS: BYTE 0 ; driver flag byte (def follows) INIT == 1<<0 ; initialization flag WRPFL == 1<<1 ; write protected flag ULRFL == 1<<6 ; user line E 0X52,CRT_PARM BYTE 0X0E,CRT_PARM BYTE 0X06,CRT_PARM BYTE 0X13,CRT_PARM BYTE 0XEE,CRT_PARM BYTE 0X45,CRT_PARM BYTE VSYNC|0X01,CRT_CMD ; master video sync BYTE ZOOM,CRT_CMD ; zooming disabled BYTE 0X00,CRT_PARM BYTE PITCH,CRT_CMD ; 80 c SIGNAL# ; signal process completed OR AL,=0XFF ; set status POP DI POP SI ; restore regs RET ; and exit ; __SCR: CLD ; set direction = increment MOV AX,DS MOV ES,AX ; copy DS into ES seg reg TEST FLAGS,=INIT ; test initializaload (reverse) flag ; CURSCR: BYTE 1 ; current screen number SAVSCR: BYTE 0 ; save screen variable ROWCOL: WORD 0 ; current row/column (low/high) NXTSEQ: WORD 0 ; next routine in escape sequence BEGROW: BYTE 0 ; beginning row number ENDROWharacter per row BYTE 0X50,CRT_PARM BYTE MASK,CRT_CMD BYTE 0XFF,CRT_PARM BYTE 0XFF,CRT_PARM BYTE PRAM,CRT_CMD BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X0tion flag JNZ __C1 ; if done, continue PUSH CX ; save output char MOV BX,&NITCMD ; get init table addr CALL GDCOUT ; and output it CALL SLINIT ; initialize status line CALL CUPSCR ; clear user screen area OR FLAGS,=INIT ; set init: BYTE NMBROWS-1 ; ending row number TOPROW: BYTE 0 ; current top row number TMPROW: BYTE 0 ; temp row storage area CSRDLY: BYTE 0 ; cursor delayed enable counter ; SMXSPH: WORD 1 ; screen mutual exclusion semaphore WORD . WORD .-2 ; ; 0,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM BYTE 0X00,CRT_PARM __LEN == (.-NITCMD)/2 ; CCHRCMD:BYTE CCHRCLN ; curs flag for further entry POP CX ; restore output char __C1: MOV CSRDLY,=CSRCNT ; pre-set cursor delay count AND CCHRP1,=~(1<<7) MOV BX,&CCHRCMD CALL GDCOUT ; disable cursor display MOV DX,ROWCOL ; load current row/column address MOV AX,NX ; ASCII control code lookup table. ; CTLTBL == . ; base of the lookup table BYTE 0X07 ; #1 BYTE 0X08 ; #2 BYTE 0X09 ; #3 BYTE 0X0A ; #4 BYTE 0X0B ; #5 BYTE 0X0C ; #6 BYTE 0X0D ; #7 BYTE 0X1A ; #8 BYTE 0X1B ; #9 BYor char command BYTE CCHAR,CRT_CMD CCHRP1: BYTE 0X92,CRT_PARM CCHRP2: BYTE 0X21,CRT_PARM CCHRP3: BYTE 0X8A,CRT_PARM CCHRCLN == (.-CCHRCMD)/2 ; CSRCMD: BYTE CSRCLN ; specify cursor command BYTE CURS,CRT_CMD CSRLOW: BYTE 0X00,CRT_PARM CSRHI: BYTSEQ ; get possible next escape sequence MOV NXTSEQ,=0 ; always clear it TEST AX,AX ; sequence present? JNZ SEQCOM ; if so, continue CMP CL,=ASP ; displayable char? JNB DISPLAY ; if so, continue MOV DI,&CTLTBL ; get control char lookTE 0X1E ; #10 CTBLEN == .-CTLTBL ; length of lookup table ; ; ASCII control code branch table. ; CTBLXEC == . ; base of execution table WORD BELL ; #1 ring the terminal bell WORD BACKSP ; #2 back space WORD HZTAB ; #3 horizontal taTE 0X00,CRT_PARM CSRCLN == (.-CSRCMD)/2 ; WDATCMD: ; write single char command BYTE WDATCLN BYTE WDAT,CRT_CMD BYTE 0X00,CRT_PARM CHAR: BYTE 0X00,CRT_PARM WDATCLN == (.-WDATCMD)/2 ; WATTCMD: ; write attribute command BYTE WATTCLN BYTEup table MOV AL,CL ; load char MOV CX,=CTBLEN ; get table length REPNZ SCAS BYTE ; look for a match JNZ __X ; if not found, cont MOV BX,=CTBLEN-1 SUB BX,CX ; calc length into table ADD BX,BX ; time 2 for execute table CALLI CTBLXb WORD LINE ; #4 line feed WORD RLINE ; #5 reverse line feed WORD NFSP ; #6 non-destructive forward space WORD RETURN ; #7 carrige return WORD CUPSCR ; #8 clear unprotected screen WORD ENAESC ; #9 enable escape sequence WORD WDAT|0X10,CRT_CMD CURATTR:BYTE 0X80,CRT_PARM WATTCLN == (.-WATTCMD)/2 ; RDATCMD: BYTE RDATCLN BYTE RDAT|0X10,CRT_CMD RDATCLN == (.-RDATCMD)/2 ; PRAMCMD: ; Write parameter RAM command BYTE PRAMCLN BYTE PRAM,CRT_CMD PRAM1: BYTE 0X00,CRT_PEC[BX] ; execute the function __X: CALL UPDCSR ; do cursor update stuff RET ; and exit ; SEQCOM: CALLI AX ; continue escape sequence JMPS UPDCSR ; do cursor update stuff ; DISPLAY: MOV CHAR,CL ; set char in command string CALL PNTC HOME ; #10 home cursor ; ; ESCAPE sequence lookup table. ; ESCTBL == . ; base of the lookup table BYTE "=" ; #1 BYTE "*" ; #2 BYTE "T" ; #3 BYTE "Y" ; #4 BYTE "C" ; #5 ETBLEN == .-ESCTBL ; length of lookup table ; ; ESCAPE ARM PRAM2: BYTE 0X00,CRT_PARM PRAM3: BYTE 0X00,CRT_PARM PRAM4: BYTE 0X00,CRT_PARM PRAM5: BYTE 0X00,CRT_PARM PRAM6: BYTE 0X00,CRT_PARM PRAM7: BYTE 0X00,CRT_PARM PRAM8: BYTE 0X00,CRT_PARM PRAMCLN == (.-PRAMCMD)/2 ; ; FIGSCMD: BYTE FIGSCLN BYTEC HAR ; point cursor at char memory MOV BX,&WDATCMD CALL GDCOUT ; write single char CALL PNTATTR MOV BX,&WATTCMD CALL GDCOUT ; write single attribute CALL NFSP ; do non-destructive forword space ; UPDCSR: MOV ROWCOL,DX ; update currentute byte TEST AL,=1<<5 ; protected field? JNZ BACKSP ; if so, try last field __X: RET ; else exit ; NFSP: ; non-dest forward space. CONTROL-L INC DH ; increment column number CMP DH,=NMBCOLS ; cursor column wrap? JC FCKWP ; if nXEC[BX] ; execute the function ; ; ; +------------------------------------+ ; | TERMINAL ESCAPE SEQUENCE FUNCTIONS | ; +------------------------------------+ ; ; Set cursor X-Y address. ; SETXY: MOV NXTSEQ,&SETROW ; next char should be the row  row/column CALL PNTCHAR ; point cursor at character memory RET ; and exit ; ; The following routine is called from the real-time-clock driver to ; check for the cursor enable delay count. When count of zero is reached, ; the cursor is re-enaot, continue XOR DH,DH ; cursor to starting column CMP CURSCR,=0 ; screen = user line load? JNZ LINE ; if not, continue with line feed TEST FLAGS,=ULRFL ; user load reverse flag set? JZ __C1 ; if not, continue CALL DELCHAR ; delete th RET ; done ; SETROW: MOV CH,=NMBROWS ; get number of valid rows CALL CKBIAS ; remove ASCII bias JC _X2 ; if invalid, exit MOV TMPROW,CL ; store in temp variable MOV NXTSEQ,&SETCOL ; next char should be the column _X2: RET ; done ;bled. ; CSRCHK:: CMP CSRDLY,=0 ; check for count reached JZ _X1 ; if so, continue DEC CSRDLY ; decrement the count JNZ _X1 ; if count still going ; ; This entry is called from the keyboard input routine to enable the cursor ; unconditioe char at column 0 __C1: MOV DH,=NMBCOLS-1 ; else, reset to last column RET ; and exit ; LINE: ; line feed function. CONTROL-J INC DL ; increment row number CMP DL,ENDROW ; cursor row wrap? JBE FCKWP ; if not, continue TEST FLAGS, SETCOL: MOV CH,=NMBCOLS ; get number of valid columns CALL CKBIAS ; remove ASCII bias JC _X2 ; if invalid, exit MOV DH,CL ; move to reg MOV DL,TMPROW ; get temp stored row JMP FCKWP ; check forward movement and exit ; ; BEGCOLOR: nally when waiting on a character. ; CSRENA:: MOV CSRDLY,=0 ; force count to zero OR CCHRP1,=1<<7 MOV BX,&CCHRCMD CALL GDCOUT ; re-enable the cursor _X1: RET ; exit ; ; ; CONTROL CHARACTER FUNCTIONS. ; ENAESC: ; start escape seque=WRPFL ; write protect mode on? JZ SCROLL ; if not, continue MOV DL,BEGROW ; reset to first row FCKWP: TEST FLAGS,=WRPFL ; write protect mode? JZ __X ; if not, continue CALL RETATTR ; return attribute byte TEST AL,=1<<5 ; protected f ; set colors attribute MOV NXTSEQ,&SETCOLOR RET ; SETCOLOR: SUB CL,='1' ; remove ASCII bias JB __X ; if invalid, continue CMP CL,=7 ; check upper limit JA __X ; if invalid, continue MOV AL,CL ; move to reg MOV CL,=5 ; get shnce. CONTROL-[ MOV NXTSEQ,&BEGESC ; set sequence function number RET ; and exit ; BELL: ; ring the terminal bell. CONTROL-G MOV CL,=ABEL JMP DISPLAY ; HOME: ; home cursor function. CONTROL-^ MOV DL,=0 ; get starting row number ield? JNZ NFSP ; if so, continue __X: RET ; else exit ; ; Scroll the screen. ; SCROLL: DEC DL ; restore last row on screen INC TOPROW ; bump current top row CMP TOPROW,=NMBROWS ; and load the value JB __C1 ; if not, continue MOV ift factor SHL AL,CL ; move bits AND CURATTR,=0X1F ; strip old attributes OR CURATTR,AL ; add new ones __X: RET ; done ; ; ; Check ASCII bias. Limit in CH reg. ; CKBIAS: SUB CL,=ASP ; remove bias, check lower limit JC __X ; if inva JMPS RETCOM ; and join common ; RETURN: ; carrige return function. CONTROL-M CMP CURSCR,=0 ; screen = user line load? JNZ RETCOM ; if not, continue common MOV CL,SAVSCR ; get restore screen number ;;; CALL SETULS ; and do user line stTOPROW,=0 ; reset top row __C1: CALL PRAMOUT ; send scrolling command PUSH DX ; SAVE CURRENT ROW/COLUMN MOV DH,=0 ; SET COLUMN ONE CALL CUPEOL ; clear unprotected end of line POP DX ; RESTORE ROW/COLUMN RET ; all done ; HZTAB: lid, exit CMP CL,CH ; check upper limit CMC ; invert logic __X: RET ; all done, exit ; ; ; Clear unprotected screen. ; CUPSCR: MOV TOPROW,=0 ; reset top row CALL PRAMOUT ; send PRAM values XOR DX,DX ; reset row/column register uff RET ; and exit ; RETCOM: XOR DH,DH ; cursor to starting column JMPS FCKWP ; check write protect stuff ; BACKSP: ; back space function. CONTROL-H DEC DH ; decrement column number CMP DH,=NMBCOLS ; cursor column wrap? JC BCKWP ; horizontal tab. CONTROL-I MOV AL,DH ; get current column XOR AH,AH ; make double length MOV CL,TABSIZ ; get the tab size DIV CL ; calc last tab column MOV AL,TABSIZ SUB AL,AH ; calc length to next stop ADD AL,DH ; calc next tabMOV ROWCOL,DX ; and storage location CALL PNTCHAR ; point cursor at screen memory MOV AL,=NMBROWS ; get number of rows MOV CL,=NMBCOLS ; get column size MUL CL ; calc screen positions DEC AX ; adjust for DC variable MOV FIGSP2,AL MOV ; if not, continue MOV DH,=NMBCOLS-1 ; cursor back to last column ; drop into reverse line feed function RLINE: ; reverse line feed function. CONTROL-K DEC DL ; decrement row number CMP DL,BEGROW ; cursor reverse row wrap? JC __C1 stop CMP AL,=NMBCOLS ; test against number of columns JNC __X ; if over limit, continue, no change MOV DH,AL ; set new column number __X: RET ; all done ; ; BEGESC: MOV DI,&ESCTBL ; get control char lookup table MOV AL,CL ; load  FIGSP3,AH ; set DC variable MOV BX,&FIGSCMD ; get figs command addr CALL GDCOUT ; and send it MOV CHAR,=ASP MOV BX,&WDATCMD CALL GDCOUT CALL PNTATTR ; point to attribute memory MOV BX,&FIGSCMD CALL GDCOUT AND CURATTR,=0XE0 ; reset ; if so, continue CMP DL,ENDROW ; check upper boundry JBE BCKWP ; if not, continue __C1: MOV DL,ENDROW ; cursor wrap to last row ; BCKWP: TEST FLAGS,=WRPFL ; write protect mode? JZ __X ; if not, continue CALL RETATTR ; get the attribchar MOV CX,=ETBLEN ; get table length REPNZ SCAS BYTE ; look for a match JZ __C ; if found, continue RET ; else just exit ; __C: MOV BX,=ETBLEN-1 SUB BX,CX ; calc length into table ADD BX,BX ; time 2 for execute table JMPI ETBLC  non-color attributes MOV BX,&WATTCMD JMP GDCOUT ; send write data command ; ; Clear unprotected to end of line. ; CUPEOL: CALL PNTCHAR ; point to char memory MOV AX,=NMBCOLS ; get number of columns SUB AL,DH ; calc remaining columns D; calc beginning row addr MOV CL,DH ; get current column XOR CH,CH ; make double length ADD AX,CX ; calc distance into row RET ; all done ; ; ; PRAM output subroutine. This routine calculates the PRAM values ; based on the current top$ G O}&/$<tg/q 6q6$5$>=0% 0) ->862EC AL ; adjust for DC write MOV FIGSP2,AL MOV FIGSP3,AH ; set figs parameters MOV BX,&FIGSCMD CALL GDCOUT ; send figs command MOV CHAR,=ASP MOV BX,&WDATCMD CALL GDCOUT ; write data and exit CALL PNTATTR ; point to attribute memory  row (TOPROW) and number of user rows (NMBROW). ; PRAMOUT: MOV AL,TOPROW ; get current top row MOV CL,=NMBCOLS ; get number of columns MUL CL ; calc starting address MOV PRAM1,AL MOV PRAM2,AH ; set start addr, ptn 1 MOV AL,=NMBROWS ; ge ^<t 6Ƅ2 -3 $<t13 >3 t>4 t"Ă>5t"<tR6-2> t$>u-7X D( G gaX & G IC< X jt= X Vt&  MOV BX,&FIGSCMD CALL GDCOUT ; send figs command MOV BX,&WATTCMD JMP GDCOUT ; ; ; Clear unprotected to end of page. ; CUPEOP: PUSH DX ; save current row/col __1: CALL CUPEOL ; clear current row to end of line XOR DH,DH ; force first t max row number SUB AL,TOPROW ; calc rows to end of ptn MOV CL,=19 MUL CL ; times line size MOV CL,=4 SHL AX,CL ; adjust field MOV PRAM3,AL MOV PRAM4,AH ; set length, ptn 1 XOR AX,AX MOV PRAM5,AL MOV PRAM6,AH ; set start addr, pt>J $<t0q~q6q>  )1A X tB X t& t-:F6 6Hȍ'[6_c$<uz6[4)t<t6[column INC DL ; select next row CMP DL,=NMBROWS ; test against max rows JB __1 ; if still on screen POP DX ; restore row/col RET ; and done ; ; DELCHAR: RET ; ; INSCHAR: RET ; ; ; +----------------------+ ; | STATUS LINE Rtn 2 MOV AL,TOPROW ; get rows to end of ptn MOV CL,=19 MUL CL ; times line size MOV CL,=4 SHL AX,CL ; adjust field MOV PRAM7,AL MOV PRAM8,AH ; set length, ptn 2 CALL GDCFE ; wait for fifo empty MOV BX,&PRAMCMD ; get parameter ram!=Z6[4t<t6[ 4t<tà6[+4t<tË6[2-6[44-t<t6[4ޱ.q6]aiw8~$<tOUTINES | ; +----------------------+ ; ; Initialize the status line. ; SLINIT: RET ; all done ; ; ; +----------------------------------+ ; | SCREEN DRIVER COMMON SUBROUTINES | ; +----------------------------------+ ; ; Point cursor at curr command CALL GDCOUT ; send to device JMP GDCFE ; wait fifo empty and exit ; ; ; GDC command output subroutine. ; On entry: [BX]=length of command,[BX]+1=Commands/Parameters word list. ; GDCOUT: PUSHF ; save flags CLI ; and disable in*,6[Ѝ4Ȱw)aa9~#6[/=[Qw2䢤8%iؠ؉g6g<`~6g$ҋ6cag6gw=9ccc.cFءgent DX specified row/column. ; PNTCHAR: CALL SCRADDR ; calc screen address MOV CSRLOW,AL MOV CSRHI,AH ; load command variables MOV BX,&CSRCMD JMP GDCOUT ; send command and exit ; ; Point cursor at current DX specified attribute field. ;TTd7q4 rx J q5 t<t 7 rH E F l 48 4F sc.cF؉.[vȰ>c.cF؍g6g6c>c>6cw4]w<u6c>ck6k4obc؍mk.mv?:c؋ PNTATTR: CALL SCRADDR ; calc screen address ADD AX,=ATTROFF MOV CSRLOW,AL MOV CSRHI,AH MOV BX,&CSRCMD JMP GDCOUT ; ; Return the current attribute byte. ; RETATTR: CALL PNTATTR ; point to attribute memory CALL GDCFE ; wait for fi8 4P 4 4F u<t_E $<tM0 g   g / lPg b 0?F pw;6F E $<t<ty`E 6F >F @H 6F +E HE C %E $<tMyw7w>"<t7mk6cm6k>m5=뛋6mo=ؠ@8t$G6]aFâ8~}6[4ȰE-[tࢯ.fo to empty MOV BX,&RDATCMD ; load read command addr CALL GDCOUT ; and issue it JMP GDCIN ; read returned value and exit ; ; Calc physical screen address from row/column. ; On entry: DL=row, DH=column. ; On exit: AX=screen address. ; SCRA g   g x Pg  yF 4 rt$J .H FR M L  _ P E $<u\<tG  t<umG ! nt<t$<tGt& t-.t<tw6[H=[ c ËG&cNMP6I؋6G2;}Ë6G4Dt<tË&cf&c_&cXXM&cF6N2DDR: MOV CL,DL ; mov current row to reg ADD CL,TOPROW ; add in the top row base CMP CL,=NMBROWS ; check for max row wrap JB __C1 ; if no wrap, continue SUB CL,=NMBROWS ; wrap screen memory __C1: MOV AL,=NMBCOLS ; get constant MUL CL G r M 8L ~L M L R 90N Y ` ްZ ȋG U# t<tHM 8L ~L M L _ >#  F NG ޱ gL _ F C>P t " D &c)6IoMQMbN؂|=EMu<tb&>b} MQ#Mo볋6K>I-Q{G&c 6N| }M) &cf fMFMiu<t FM9M{a~ au& wa>auadbyyob~f$!+ێOY&r#ێӋúRQ@$+vs*GG#SKK[CÇڋ˻uÊ:tC uÊK:tSKK[ډK uv<rtu+ڊ$ȊCЊ/B 6N| M&c &c JP$<tP>6G2@GB>@9>~뿋6B6>4\6N<`~&MË 66B6II9B~6.BKKH$<u6D<u<tWb>b {Gb(}6+t&>&r+8~P6*<t#6^ S=1 ^%u t;Sٰ*Cu[QSً^RڱMZRFZ[Y u722IC?KK7 tu +ð@@ȋ[++N x*XX[YZ_RQSP*:s*N*:r*GG؊ F_Z FGQ*GG6D>@N6DF6F<t6FFڋ6F>@66>9~Q> >Bu 6أF 6F6>F6>BS6U6S4&6&>*Ë62䣝9%64wȰ Ë6  s Y ËËS [< r <"rú  Ë+û\ûlû2[PDt FF*:ZG/ F) GFF*؆ZGG*Y** t# t tuJt :u GJu< uËFF*S[ZW*G*:s_Ê FZ*+RPnXËG*GG uY*+QAFFQ7Y*[:sQ࿰>t<t!SY6Y$]f$<tàv$<tMv6@_Y_]>],>_}___]_w]c6a]w_Y_c9a]]we6_[6S>[=4r<t_Hac|vojhbe Z] R Mñ C ><69.1&)  7^D  !"WG_X*[ FWG:r_Ê F:sP**s sX^*4NG[YSZZY[QR(D&(]:v+PQ Iy-B 0 ׈Ot LjOYX*GG*SȬhXY GFF*SQXYGCGGe_^16S>[=4w<t_@ca+e_^Fj^$<ta_c_6_[6S>[=4uu<tË6U6W_Ëy 66 6y<u6yyzoPt<#xx$mm%bzb(Wwt4wwt4u3]X3Z3Վ;u;sNOCs++ßPSޞRQڋ!ډ!C7Cڻ ܇ڈC7CYZC7CC/ t IBC[XĞSP! t1SC7*S3XYGG* FF*SXYȬ G t**;rQWV^_YtFJu++Câ3*[C$ȊsCCC? u85SCCC7C*ÊЊNJsR*ЊŊ[r u<rFSCCC7Cهڋ^SCCC7ZC7Cڋ^ڈC7KKKtޱpo&t<tޱp6}q4â>t06}б4R6Eȡ}6}j=l}6}u=o>o1oډ!CCCC7CC/ t ICB[XĞ[Ë! t)SC7CC/܊*Ê[s ډ!͠ t܇ڻ*Cr ߻܇ڠ uÊȵIي*Csûي<s(ˊ }/vQpC/QeC7[YQRS<sٷڊ$ C7[CCCCÊ uÇڋ*Šr*ÊrڟK/KK7Ks*Êr*r| t*r"ي$ C7ڟCCC/sÊيC/CC7ڊs&C/KڊيCCC7ú\t$9|64>(666< t<tы6o>?6$<t%kT؀뺋6t?R[ZY<u<r,ڻ*tC*tËSS[Z[ZY,uÊ y uRSQPhXĞжڞޞ֊C7;(8Ys)-[ t[ t S,[ð 8 3 .$0<:r埆PXS[xn< s< u C[ uSn[ uÊжJڊC7ډ.CBu NjBu tÊ<rËà uËBCu]3ۊȊ uYOA<-t<+uGIOP Ê t(0r:9w5p>u> u/oo o 6>}%ظv ظo 4 ظ6 ފȰ6G .F ^S[< rd:r :r*PXĞÊuC uQS{[Yڻ܊*ÊЊu r< rF#Cڰ uȊC7CSPNX[:S$< s?[Sl[Sޞ\=[C7ڊ u<rU1q=u%X<-u PGӋX<-u3Ұ uËЊ00 Dt3۱/C-G03tF+uO=.uO0 =0u GO=¹*[" ĈuM.Mû 6{8~ظ뢛6Ȋб4 ޱw 7 )Ë^*$<u*6^48 , t<t))d6d6 $5$>=a - T "dgkioomޞ/C/ͰAt CP<u < .t< t{XĞuԇڊC7Cþ rPrXë^V. u .~&Ɔ~frC t?%Br;r&E.r &D븋vVsF]_^ZY[X v v~RPSQU^G dG ^ G]Y[XPSQU^3=^ _2^*^ ]Y[XPSQU^ ] CANNOT CLOSE DISK FULL dkoB`CC  Later CP/M or MP/M Version Required$ File: Traceback:&3@P ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZERO DIVIDE END OF FILEd 0Mõ)sPu tu t0$XS^U]^[ÜP.CtXquPSQR$±ZY[XPSQR$±ZY[X9 4VW֋ȎмSQRVWUw߷w.++.IF Free Space Exhausted FREE Request Out-of-Range$ Free Space Overwrite$ Conversion@ Network error ]_^ZY[֋_^ ˀ ws.y ÿQYyV ÿyV ws .x Q+YyxHñ  @ úR Zö ö t PSQVWж_^Y[XRRR Z? Lf-------------------------------------------------- GSX-86 Graphics System Extension 09..}F^NVv~Fn5&tt6+eU vSWU}v..«]_[5&L0SWu..ЍEǃ;sD_[øxPQRUNQN Q1r+Ҙ,0Ȱ sVF]ZYXNQN Q,<0r<:PQVWU~v Feb 83 V1.0 Serial No. 5006-0661-654321 All Rights Reserved Copyright (c) 1983 Digital Research, Inc. -------------------------------------------------- $^ syntax error$ close error$ not found$ syntax error$ empty$ contains absolute segmeJJ8COPYRIGHT 1984, SOFTWARE 2000, INC. (VERSION 01/24/84) `&b؎м` B1Ct/C<;tIt&qCVvVNq<@r5uPP2PP P JPP2PP P JF;F~eCGMGD\\þ8&Iu\ t46~PNP6NO8^X&ź\h:v &4v&] t_& ~;~A& Q}.USPC PP2PPP JPP2PP P JPP PP. APP2PP P JPP2PP P JPP2PP P JfB PP2PP P J  HPP2PP P JFu87ww+Pˀ>7rZ\R\?777P[ñ :5t'ñ(tñ &u ñ3 ; 24 PP2PP P J и김>+ȉ24iPP2PP P J.>+ȉ24@`PP2PP P JPP2PP P ;F~ BPP2PP P JPP2PP P JPP2PP P JfPP2PP P J  PP2PP RUN 0.0 7/29/82 $CLOSE ERROR$NO FILE$DISK READ ERROR$J~PP2PP P JPP2PP P J2@ . 4PP2PP P JLPP2PP P J~F P J PP2PP P JB  PP2PP P J PP2PP P JPP2PP P JBPP2PP P J P P J224K6>8K: < PP2PP P JPP2PP P JPP2PP P J2@Q4K6]8K: < 8PP2PP P J7uHPP2PP P JPP2PP P J#XPPPP2PP P JPP2PP P J CPP2PP P J PP2PP P J CPP2PP P JBPP2PPP2PP P J>72>4>PP2PP P J~ Hи6DHDFPP2PP P J2>42PP P JPP2PP P J>uL2@4 PP2PP P J>>>~j24PP2PP P JP P J PP2PP P JPP2PP P JPP2PP P JPP2PP P JP*PPPC2>>PlP2PP P J\ dPP2PP P J72}4>68>PP2PP P J  ~ 2и@@4PP2؋ W2 G< ~'؋w20G<24F>HPP2PP P J7>ui 24PP2PPP J24>P*P2PP P J7PP2PP P J~ PP2PP P JP*PPPC .24P*P2PPP J 24>PP2PP P J u S 24@PP2PP P JPP2PP P J2>4'P4>PZP2PP P JPP2PP P J>uP*PPPC24P"P2PP P J.24P*P2PPP P JP*PPPC24P*P2PP P J2@46+8PP2PP P JPP2PP P Jl P2PP P J2>4'PP2PP P J 24 PP2PP P J7 2246K82PRP2PP P JP P J7>u>~ 24>PP2PP P JPPP2PP P J>uI24PP2PPPP2PP P J7 F;F~$؁t>u4@8~PP2PP P JPP2428KPRP2PP P JPP2PRP P J7;u_;tT PRP2PP P J7 F;F P J7PP2PP P J]I.U^& ^&^ P&^R&XYPP PPP J]K.UPP P J  .2@6PP2PP P J.F;F~$؁t>ut 24%68%:<2>@ ~и2PP2PP P J2d .468PP2PP P Ji7dF;F~PP2PP P J PPPPP JPPCPC PPPPP J]P.UPC] V MhER.US^ &?~6^ &FPP2PP P JF;F~$؁t>uPP2PP P JPP2PP P J 24K68K:$24P@P2PP P J.q7>}GPP2PP P JXPP2PP P J>~;F~^XS{]UvVv VvVvVvVԹs]Q. U.&@&P& Z;8 SfPD.& @& ؊&W &.&&G^&] W.U^& y؉<W>@ PP2PP P JF;F~$؁t>uPP2PP P JPP2P~PP2PP P JPP2PP P JHP12 Z김>+ȉ4PP2PP P J2Hи김>+ȉ46>F ^&^ &;} ^&PP Pv 0^&@>t^&?|/^ &;|@^&@- ^&N;|.^&x>&P&P&x] Q.U.& PP@& & &&&&&&&v v o] S. US^&H;}‰PPPv@HFFPPPvC.&&       $ (,.36<@DH O RVY]bhlpt z}.&&]T.Uv v.S~]U.U^&?~&^ & P|@ZP@Y r;u^ &;t^ &;tr^&.&;tPD                *2 6=EH N RU[\_fPD^&?tPVPVqPZPZX^ &^&.&;tPD&^&?tPV PZ]V.UP4:tP4:t]jnn sy}            # (), .5 7;== @ BCDDD EhhmMM QQEIoo ruv{{}~~    V\AKEY=@+@8D@Q%2>KW2KK@QKK2 ABCabc@`@`]a@ebbGIOS TESTERENTER STRINGPRESS A FUNCTION KEYTEST GIN - INPUT 5 POINTSGRAPHIC SOFTWARE SYSTEMS, INC. !"#$%&'()*+,-./0123456789:;<=>?@ABCPRESS RETURN TO CONTINUEG terrupts PUSH DX ; save regs MOV AH,[BX] ; load command length INC BX ; bump pointer XOR DH,DH ; clear reg __LOOP: TEST AH,AH ; any bytes left? JZ __X ; if not, exit loop ; __C1: IN AL,CRT_STAT ; read GDC status TEST AL,=FF ; fifo full? JNZ __C1 ; if so, wait MOV DL,1[BX] ; load port (command or parm) MOV AL,0[BX] ; load value OUT DX,AL ; and send it INC BX INC BX ; bump table pointer DEC AH ; count words down JMPS __LOOP ; and continue loop ; __X:   Unr$.%蒙Y莙.&%g POP DX POPF ; restore interrupt status RET ; else, exit ; ; ; Wait for GDC fifo to empty out. ; GDCFE: IN AL,CRT_STAT ; read GDC status TEST AL,=FE ; fifo empty? JZ GDCFE ; if so, continue loop RET ; else, exit ; ; ; Read arUnr7sUnr~sUnrs@?1 @?1 @?1 @?1  GDC returned parameter. ; GDCIN: IN AL,CRT_STAT ; read status TEST AL,=DR ; data ready? JZ GDCIN ; if not, loop IN AL,CRT_PARM ; read the data RET ; and return it ; END sR Tf)h)(If)h)(I>'u>'t)))@)=)>)6J)>O)stf)\)#}>'u 'Kۋn)d)h)-9\)v6O)>J)sg"iû'K''û'K''û'K''Ã>l)t"GFFurs>'tf>'td)K#=ud)u{d)#6suvsC;d)rbCd)j)d)K<u d)u#d)u6susC;d)r=sj)d)d)K#<u d)u#d)'c#6susC;d)rÊ'K (Í( &((ù 0NÍ(l)L)`>'tX6>.\)L)>㋇osload.cmd   .\)L)㋇  M)`)Z)W_^)J)5_=tl)GGZ)=tl)GGZ)>Z)@v\)`)>`)rû)=t&9\)w\)+H@)Z)H^)CCCC^)soopapooqpooq]qoorq4@G 6V< tV]U> u]Is>]t> uÈ>u뿀> u]U > w1s  Ƈ    P7 u  > r@" sW <v@" s' COPYRIGHT (C) 1981, DIGITAL RESEARCH [], ERROR: $, LOAD ADDRESS $DISK WRITE$DISK READ$INSUFFICIENT MEMORY TO CREATE CMD FILE $LOAD ADDRESS $ERROR ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $BYTES READ $RECO :t Ǡ s 뗠 s]U>]u@P> u@Y"r>AuP YNÀ>Mu(P YPP YK딀>XuP YR>BuPY ]RDS WRITTEN $H86CANNOT OPEN SOURCE$CMDNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$CODE DATA EXTRASTACKX1 X2 X3 X4 8080 NZERONHEADXێӼP@`%&G*v &G.x  t  O 5} u _ s  pq$t[M 8 t>t@ZP; w@Y"sZ+ jZ8SPE6fP7P\Ps4h|\P]KPPPP8\Pt]UZR;v xPIFX6Z]UZR;r@"sX6ZZ]U츠P<t  Clأ+$2K bt K Gj' D  2Cñ{ûc *C:uC+ø@`%(&@`%'7&@`%&4 &FC>ut@`6`TPt6ZFPf1`;Zs u!X6`0` P]U6`:P P]U6zN\Pt4]UzRzdR;w zs]6zRPdA+zZQ]UP<t>vPPh&Ȣu >u끷ZH|9jw0 u|끷S|j,F YK]UVH   <t <t &Ei _c N <8t t o .4v2 0', t   CPM SYSCPM SAVInvalid command selection: $FD write error $CPM.SAV$ already exists! Erase $Memory not available $ Now loadi *************** CP/M-86 CONFIGURATION PROGRAM Ver 1.3 **************** * * * QSڊ$< r0$< r0[C'CBYQ@t @t  Sڈ[CBYÌأú} QQ CY Y417 2v< t/< td<uy< u<u<0rFng $ File $ Your $ Has been configured$ File ? (Y/N):$ Load error !$ Update $ Create $Memory resident CP/M-86 1.1 has been updated$CPM.SYS file not found ! $Parameter error !!$Currently " read after write " mode ! C FOR APC * **************************************************************************** CONFIGURATI8} 륀>} `^>} sht> t k*>8O>v?#tV> * tP*ڈÌأ 000M} QQhange Mode ? (Y/N):$Currently " non read after write " mode ! Change mode ? (Y/N):$* Printer type selection * $Currently " Default " mode !$Currently " PINWRITER " mode !$Currently " 8023 " mode !$Change mode ( Default,8023,PINWRION MENU 1Y Y*tÀ>ttQS4[CY >1I1 <1<1>1>>1u>1>/>1*؋ >1#<1<1>1}>1 /<1 TER ) D or 8 or P :$Requires Version 1.107 of CPM.SYS file ! $CPM.SYS file required!$* Console display selection  1. Character display ( mono ) 2. Character display ( color ) 3. Graphic display ( mono )[11;2 1. FLOPPY DISK READ AFTER WRITE CONFIGURATION 2. LIST DEVICE CONFIGURATION 3. AVAILABLE DISK DRIVE SELECTION u <1C>1 N/eQPXP<1t YKNBXYÊ>1*>/ (>1ù?1 <1t& GFú<1r <4w,0ذYþ&Y̺Pu c t) }`%ƨ&}`%ƈ& >utZ}`%7&}`%ƈ&4ƀ &CF}`%ƈ&Æ}} * TYPu> t >v ǀ}û\ $A\;P5XtY4 A@:",*&A@:"  E THE CORRESPONDING NUMBER (1 - 6):  Q}6 @6 _Yt6 ;wLtúS<`r<{s, Ê } TO MOVE THECURSOR BE & * LIST OUT CONFIGURATION * * Parallel(P) of Serial(S) Interface? LOW THE DRIVE SELECTIONS.ONCE THE CURSOR IS POSITIONED, TYPE {Y} OR {N}TO INDICATE IF THE DRIVE IS AVAILABLE OR NOT.PRESS THE {ESC} KEY TO RETURN TO THE MAIN MENU.$@ARS * Lenqth = 7bits/8bits ? (7/8): Lenqth = bits, parity PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 PPPPPPPPP 2 3 4 5 PPPPPPPPP 6 7 8 PPPPPPPPPPPP * Operation guide * 9 A * Move cursor B PPPPPPPPP ( ) C * Modify code D ( 0 - F ) E * RetuPPPrn to menu F ( ESC )  N/W/`/i/r/{///$$$$$[12;I ] " " FrEh8GP m>  ߡP > u3  @ N á R YPT Y# tR YV T V ; 0 PP t  NK EKZ >K, HPjdP EbZ`P, PNdZ`P, HaJ J ð  d> * %=t Ë> $  > 0  ;8 ȡ6 ; ȡ ;: ȡ< ; s Y @@  Y P PV V Xغ X| P~ P t t 뷡 t Á>V 0# ȸ9;V # t$ u0>V ȸ~;V #ȸ;V sV ; u!V ; ȁ>V soV ; Pȁ>N #sV ; u> ȁ>N #sPV ; u ~ @~ R áV ; u ~ H~ R áV ; u | H| R áV ; u | @| R áV P t)R Á>N uXV XV V ; ȁ>N #s#>N uV ; u ~ @ á +: ., 0 P +8 P t  6J -JZ &J> : > ? J ð  c> &  > 2  \ Z _P &DbaZ~_Z u_P> ( P&Z^_V_^ M_Z D_P CaZ3_>V Y P X;؟Y#s9W6AZ /AW$A P WHWغ iW t XP P%Y 3 3; y& P PXRW0;lXغ Wq>V "P ZW; Y#s @  KVغ V13V V W~ R áV ; u ~ H~ R áV ; u | H| R áV ; u | @| R á PN>N t V P?R ø9;V y V P+R 3X .X V -0X WV >V ~ȁ>X "#s^>V ~u X PR WV V ; u@ ~ V ; u @ @~ V ; u| V ; uZ *_P> 4 PZ_j _PPP3  t> $ P @0 P ð b3; yY\ Z ^P> $ :Cv`Z^Z ^P> ( P:Zr^j i^PPP> ya^ Z J^P @0 B`Zغ V P PX t> u P PsWV:Wغ tV P PI @ V=u  LV  @V ð Y 1:mWyV > u m(EVP PW=uW Z VUP(#VZIUP 9WZ8U| R á R 3| 3~ R áR 3Z T 7 t Z Á>| ȁ>~ sZ á ; t T >  Z > u3  @ Z ð^ j ` ^ > u+ P 3gP` 'gP^ gvP> u= gP-^Z $^P @4 PZ ^j ^PPP) ð a3 > ȁ> #s á t` t> # t 8 f @0  f . ;f y. f 3;f xf f ;: y f : < ;f y0UP 9WZUP)UZUغ U P PP Pغ U t Ë U=u Ë ,E}9 ; ȡ ; #s øPB넡 áh PPPPVغ T Tt ð QX 1U=u 3 Ë^ JhXP fLP` Jg=P f1P> u+ "P fP^ f P` fO> uDfOHfO` yfOnfOVcfO^ WfO\ ðd wi3;d yd b 3b b ðh Sih PPZ hj 3ePf +@ : u f P>f 2 @P/> # t8 f 놋> $  f " ;f y" f 3;f xf f ;8 y f 8 6 ;f yf +> 8 ut f P`>f & P > 0  > $  D8f f P PV@ P PUgD8h f P P WV@ f P P DV P P + ?UغT MT P @P(U DV 2f P P @U@ P PTC^ 2h 88l h d77P .l Yn .l hh ,fغf ef ðn ip en PPZ lhPp Pn eZdغl sel 3; r r ðv hx Pv P' e;yz N Nz PP+x P2Nt ð~ |h ~ idP3P3P N | ð KhzPNPP ; y @ ; y @ ; x ; x ;8 y 8 6 ; y +> 8 ;: y : < ; y +@ : u. P P > & P> 2 P P P3| 3~  ø.l R h  7Tf SPh 7TZRf RT Rf RPV 2TZRf RP^ 1TZRغ >S 3P3P < PP7<X <` <P.~ @PS<V <` <P.| HHPSo<i<\WX )Y ])]P_ P  d ð g4 t* u#~H DFu P, HPuM á uTH Fs M L FЋȺ D QFY sB P, HdMT O BNNPP uG Es vM ð ;g  RE| P~ P) á t" +> ;8 y " +> 8 . +@ ;: y . +@ : >8 y8 >: y: 8 > 6 : @ < " ;6 y" 6 . ;< y. < 3PP D D P0 PD0 PP: 3, ; y,  b<` [< 6SL<F< 6S7<1<^ *<` #< 6S<< r6S;; t;Z ;; ; û16V 0%6^ 03l T  R b P3P3PD P tԡ ;  d=u  c áf P Pue 3; yQ(cP P HcZbZ bP P @P, HdZbP)cZbغ Cc$(}c bP)mcZbغ c ð f J  LJ O - P +J @@@P F&dZ ?bP> F  P H([P, PND @ 9< } t3PPk &D\ P0 PD: )$ P @P, HA[P, PC @ 9< } t3PP  C0 P\C:  P( @ 9< }: tO8 w PK> AxU oC: @ȁ>J #s P묡 ; u P뚋> H =u 'P> F P'<> H \5f5l > H d?5I5P .l Yn > H ȸ.l  >l u > H ȸ.l P á á ] tPZ,bP PSL @ J ; } 9L ð e3P +8 PW> & * %=t - 0 t K H  K 0FlcZ aP> & ( ZhaP P K K ð  Ge +: ., Z `C> & : S> 2 [-8 @ 9< } t @ 96 } t P P Ë> 2 4  )Y Y=u f Yf P PZ á ð e\:+Y NXP P Pw  X I 3PB 3PP3 t ð T3; y> & , P ! @2 8 Ph Á>R ȁ>R  sW á   t t> , S 2 P> & P @P û}+ C)uo+ & PA$  ( % ð$. J>. y . @. >. 0 =ȋ>. 2 = s , á4 @4 ;4 y , Ë>4  94 }ߋ>4 : H Rv 3; x*> : S> : [c(> : : > 9v Ë> : : S> < [v áv v $ ~ a ov lb3; yE @0  ;: y: < ; y< > 2 @ <> $  ;8 y8 6 ; y6 > &  P  +  t 3~ P(4 ál P& á á ø PPP R ӻN 6 ߋˋ>. 8 ى>4 : ߋˋ>. 0 ى>4 < ߋˋ>. 2 ى. ;> uy.  g> 0 ߋˡ @0 ى> 2 ߋˡ @2 ى> 8 ߋˡ @8 ى @ > H; }> H> . H2 ء4 >. 0 ߡ4 \v VLwFv áv áv ûV !z ^ !|  t ~ ~ R - _!i!@ؿ7Kx Á>R u tx tL @ z | Z %>Z &  ZZ @Z 9 }աx á z | ӻN ӻN ӻN ӻ N ӻ}N ӻmN ӻE]N ӻTMN ӻ=N ð Q=\ P PP" P t á ; t> &  á u ð OQ=^ P PP. P, áB @B D ;B y 3@ @ áF PB PF$GE > u¡ @ @ áF PB @PRF65H $. +B @B B ;D xH áF PB @PFWE > 0ȸ9; #ȁ> . rH ð%R cHs# ) >R uK>R u [ t8 Z %>Z 2  Z @Z 9 }աx áR -ؿKKZ Px S r5 x :Y0 x !@% x $ ! x S  x ú$  fx pd wx  t á ; t> 2  á u ð P~ PPPPuغ gM M=u L +  HM á t øP PO=u < +  M øP$衮 tx ð aP t7> & : S> 2 > ȡ. ; s P Ë> 2 P P Á> ȡ" ; s P Ë> & P P øPPP6 GPPP: GPPP< GPPP8 GPPP0 GPPP2 GF T C4 3> 3B F $DD ]W {: Mx Á>Z u+V U /! P PP t7 x a x áx J x :V  x $V  x V  x $  V cx m P Pz [S+ ]+5> & : S> 2 [+ &+ ð O > ȡ" ; # ȡ Qȡ. ; #Y t ø4 Ћȁ> # t  8>  ߡ >  3> >D u V >V u p> @> ;> y]>V LuD>4 6 ߸>4 : S!'[> H2 ء4  X >V Vud>4 6 ߸>4 : S!5'[B @B >4 < S}!'[> H2 ء4  X >V 0@PX _x áz ;Z x FB P Pz @P ) L$ dm J x ûW Z ;z yx ø ) P P H@PK   @ 9z }Ѻ V  x á~ ;Z x| 9dV  " 3 @ 9 }> tK P& u á( " P P*/T-t H ;& y (  >   P u^& P P P()"/,P> Y s>  ߡ 3 @ 9( } @ 9 |v9;V #ȁ>V . sK>4 6 ߸B HB >4 : S!,!> H2 ء4  X *>V (u>> 8 3 X 4 @4 ;4 y;> yMV >V u>V *u>> 8 ߸>V /u>> 8 ߸g>VdV Gv Kx 1kx *> x n1> x 6U&xJ 6? x áx áx áx áx áx áx áx û x x áx áx yV s  V o > u 3(  >   t3 >   t +  + P PX(R.#,P ; Y s @ 뚡( ; P P P( .+Y#s ( @ 9 |->( u 3  +u>> 8 ߸L>V -u>> 8 ߸1>V )u!>> 8 ߸ > @> X M 4X t>> 0 ߋˡ4 Hى X 4 H4 > H> ;4 ȡ" ;4 ȸ;> sPܡ T á t*P܋F ~* w*T Á>> uT Á` jx PV {sB L  V 8x áR -ؿKx áx Ë>z $ 8 >| 0 : t z P | @Pء ܡx tx ;z P| P#x áx û^ 9| ~ >| ȁ>|  s~ H& Ph3 3  6>  * * P$ u>  =u @ 9 }ĸ3 3 & '* P PZ'T-%+t @ @ 9( }Ӹ; x3 Ë> : > ' ' Ë> : > y' ' ð > u Py3 > Z 9>Z 8 = u Z H >Z 8 =uZ Z @Z 9> }3; y % @Z A>Z 8 =ȋ>Z 8 = s Z PZ @Z 9 } @Z A>Z 8 =ȋ>Z 8 = s Z P~ H2 @PKix áx áx áx Ë>z $  >| $  >z 0  >| 0  䡮 x ׋>| $ ;8 u6  8  > &  >| $ + P3Pأ Ok׋>| 0 ;: u<  :  > 2 @ 3, h'H t_> $   3; ȡ" ; #s+> & : > & ' Ë> 0   3; ȡ. ; #s+> : S> 2 [& & ð! ^K> : > ߋӻ m& PZ @Z 9 } |> u k ; u @; u P>% @P/ @P%3T Ë> : : \ \ Ë> < : d d ð&n xB> : ӻn l ø > 6 'K @J P>| 0 + P2أ  tۡ x á x ѣ & ( t & (  ;>  =ȋ>  =#s @ 9 }$ j S$ j >$ t>j p 4$ Pѡ x i t$>| $ ȋ>Z ,-P Z-PPP" Pgף~ t á~ ; u~ " 7 P7P~ P" P(ף t á ; u" >~ & ?V > & *^ Ë^ Z v,P Ze,PPP. P֣~ t á~ ; u~ . GT S[ X  GG GGG =u/ GG GGG GG GGG GG GGG GG GGG^z $ @X ">| 0 ȋ>z 0 @X ~ Z  '>R u  L >R u  D ^  t>Z 2  >Z &  {>R ȁ>R  sX     >R uX H -;7 P7P~ P. Pr֣ t á ; u. >~ 2 V $ > 2 t^  á øPދZ^ øPXދD^ á PPP(P ӋغF , t ËF ],D >D uƺT  +3B "V >V u ËV ,T  Sû#|&R  Y؎r;sَЋQ>ut>*+II +G A00-r. t%< uFtNV@P@Y^-Gá*+ É á à *á tP lZ PZ @Z 9 |"x Ë>z 0  > 2  ] @ >| 0 ; }աx Ë>z $  > &   @ >| $ ; }աx áR -ؿKx   X   x ËX  ux 0+غT +>V Lu/>l u 3P,T *غT +>V VuEP||,T *P+Z*PPTT,Z*غT 6+ t*PHƋF  6 PPPPԋ^ t Ë ^ u ^ } GùZD t  &Q ZRZ XPX Hs|PX$'@'XÉ+ˉOrNˁsFs t(W+rw>GÉWډtŹMOKK6;r64 t[  _x E ps 7 Ax q' Ry c #x á~ ;t t ӡx Á>~ xx Á>~ uT PPP͡ P3PP͡R -ؿK Ћȁ>~ # t" PPPPًغT 2x Ë PP3PPt ա A t * *>   P u )غ l* p+ )غ O* ))PP>  H@P+Z)P2PPġ ø \I t" ). ) 9)1;r;u L7E;tOËM+Wr;s‹ uÀ>0À>YQ󥥥ËFFFF| ^7Ir7I7IO0Ic0Iw0I|0I/uÊ u -0*xS1[ ߥ0 t@yܣ tx 3; x6 t-> : S> 2 [ $/> & : S @[  Z 1P Z1P  tx ú L u V  ~ P5; y PHr^ | tx )P +Z ))P *Z)غ ) PP3P PIӣ t á ; t + t> $   @0  >  ߡ n ' c*}(PPPPң t á ; t>  ߡ e tP3PJʣـr$s Q*HY t*QـY*2xs) mr /FO**/G/G$>Pu>r<>JP>Jn>J t u$0E$,@y ??vCSW^ú^ L u ^ Z~ @ N> u!d^ ]Y p (> u ^ 2  P @ 9 } x z P| Pϋ P  t  L u z P| Pz P| Px á gP_ t  3PP;ʣ  t ͡ @ 9 |]ա á ú  ډ_ ú  ډ 꺚 sË G ã   [ X XG G} S=| H[ XB>*[CS t8P$tȾ>sXtȾ>'uY5~ t/KK/xùFOy]"Kq"K"K"K%uZDV u0E(%Ay-AxC6B*/F/F/3 3 @ > $ P> 0 P=С P P8ϻ # t3PPѣ P3Pѣ tԋ P  t P P? L u   > : > ߋӻ ~  uXx ál @ G[ G G G   GGG  S[ X YXG  O SZX GR  GZX  XGXR GGË G/ GG ~ GG eË F/F/F/F//s6't떋W@[ $tF*'JuBBӋCCCCӃ t-%:u:u t2r ðÇ ^}LP.$YؿK u Ë& V F2 ^ 1 Ë>" & }V >. 2 h^  á Ë P V t úV L u t7P^ 7P^ Ë I.PHr V | t GTË GG   ) R P;R Y#PfY# t\  GG GGG0 GG GGG GG GGG GG GGG GG GGG GG GGJ 'Fá u' ĈGäÿ'''''''ËCC$G!G0> u tqH%&&s Ar<tV< tË tERCCڋC*ÊYQ󥥥~tvËfË+Ntx@@H2& Hఙ'y@#S[̡ u 0Ë uK[XS$v+ y؀r *tyúTډ[ [  S ST/CC QS[YCI u [MWQ)s  t  x q Q ux2V0Ȋл u< t<"t<,t1V<"tsn<"t2V<,tW¶띋Ww t2طCCSCrrG}6*à$t-%S QS< t[Y<,t$< t<2t/C܋ Qu0Y [û< tH<"t, " 2< u < uE :t$< t*CuD< t<,u  uYZRQ  u2  u Y mNN&<#u~<$u|<$ui$&<*u d<*tT*<.uU<#.u2g<-u"?<#t<.-u°2H<\u th <#t<,u<.u <#u <^ ŋCBuZWC7à Ct:rRV K[t<"uQ:uú, hSR1ޞֈZ[ÊSQ ޞֈY[SRAޞZ7[S St#RCCZYS/CCBI uZ[C7SxB tQRޞ[C%> u t t x uJú t 7CCSޞRSCC0؉Z7CYZ CBI u tȺ CBu tJS ÇڟJJ[Su [C7C? t /C;Yt-Q[RS؇[C7u<-u' u. 7Cu tȢ t t uc,@t s2  t  tű<r,Ŋ*ŢyL%W2'&% ,@*ňڻ ڰuUt S}[Sk[ڋˋ*rDO[[/CCSޞ։[u< rP|X*d*Ë*Ê[Z*Z_YQSCCӀ t[][Z2CuK2Y\V< t<+t <-u\B<0t<.u&YZ7C RS[ZCJ ur S"?[C7Ë uEN< u;r$<RWuPڋ*ÊЊNJP  u"HXĞuXr" ùWDu Ȋr< ußP    u Ȋ*<s0Kusr t u* uVtQ  tB<s8-6Ȋ<*t<$u$  utt^W u<t t t u #0 sТY<uf <0uޠ\Ȣ\à r"S0[vc Ȱ"rfcfc vcs1 t^  7,@< r t / ŊȻ2 Ct$t Т   0ucȻ  y q2 Ȱ.sl   t? u :s2*Ţ / t x)  يȵه$4s_ tЊЊПB[C7àZ uȢZC<0s<:s$ÊC7*ŠƇsyÊ uÊshû01ٞ ڞڻAޞ֊r u.P r uXE2Z vrtËӱ% t u$KKS [K u rڻ0ڇڹ!ًCBK$= ùFEu2S2C7 ¹UCuډ[2C SڊC? [tC*ÊsS2C7 t@E  u y-ű/, y  0 t 2  tà  úT u> t>t=SNSCC> u! t CS[J[ uÊr4 uY SN=ډ&?sWW* _r|:u JJ$<wGeJtr Jt<.uKJt[tyÉ>ce>aʃwl a5 u\>u, t2뺀>u<.u<*u>t'?Bt[[>`t FI¹UDuqډ-2qڻޞ։[^RS[:RFt#[t?ޞևڋBCu;0)+S>[(G ?G?Pxu XE  t+G!G.f Sr Yr tXE黾6 EOt[ࢄ~ XZY[PS [``` r u:tO "tUP tB CC"$  t+۬<#u"T*K NB u߁wS;Sn;*0YIXU rT2h߿6$7QR[4Ô FDuX>u t@>$ ÉwtùFN[Nߋ>+AËC9rY\h*eH< u '[S/[[ZRS[yZӋCC\t6RS[YSv[DtlW[S[܋AA؋CCû tS[Sxܻ2[Z넊 xYENgֻLSlܻh ػT`[Eܻh׻T٘PQCG܋QS׻C[YT?tػL׻+,8,<,R,z,,,----i4i41116--..=.P.l.....//'/=/S/o///W0000(1,1014181<1@1D1T1[1_1c1112122162B222222J33teKtTMXYCޠe$++Ptu$rS[ot:tGu*;r)GP*u*?YvS%[?Gȡvt+GuZ73P65656p6666j78c9:&;W;;>*?y??::<@" N  ERROR $ AT IP $@PPimproper input - reenter $OVRCMDCdeW'`707HWgtA1A@P\d5bEHyed"BA1PYTAE(('@ @@I@hffStgCC[;rË t;v4NRSSQڋSQr)x'SCC:ޣZYZYZ[[à LSSR t5 t9{Sڋs;_uZ[R[tr 2ðJt݇@և;t#SR;r[ t x؀'_St *[P/Xù t-PR \ u ZX€ԱԱԱ3԰mۻ*@ػֻڻ>ֻ2F׻3B+׻ա@:sߺ ׻ջJֻRջֻZջֺbջֻj׻(պֻrfff?hfffffA>533333>=ii<0$;9"sU':9"sU'9BT8!%8hxVg 7"hC60wYEG417Gv@`v'b1AAPX#C`QI"U&Àe(HBCTbDvRWaGv"C%T$a'ÙH%Csrb"(HdA1AGPINIT GPERROR.FIL--, --Y#NORMAL RUN PGMPROGRACA[S}݋غYKKá uQKKXY[Q x*S;vSRCC;݋أZZ[ùSS܋Y[Q xS+v"SRCC݋أZZ[X tuXZ[P x t uu^+SQ,J+v)Z;sSRCC܋أZZ"[,׻eաH3;xкzs ڻ?պ-ջðn ջպ'պ@ֻ%׻ԻðoԻԺֻԻԻֻԻðpbX~ԻԺԺջMCOMPUTECOMPUTE R/OC/OR/CC/R - - P Divide by 0VALUERATEPERIODSBEGINEND, (ROW/ONLY=1,COL/ONLY=2,ROW/COL=3,COL/ROW=4) PROMPTING MSG)CHOOSE (VALUE=0,CONSTANT=1,GROW=2,INCR=3)BASE!A@P|@P% Ro[*  k *SCC\܋ZSʺ  X< t *Ë t# xSta*:s'_CXSQCCۋZZSXHHÉY QPMRKAtB 98 .t/ى <\uKFCS"[r;ֻgԻðq BڻIԺyٻMֻ&3]y#%Ի*ֻ2Ի3%ջӺӻ ջӻջӻԻӻԺӻԻӻԻ ӻԻջvӁ>w Col ? Current=, Bar LinePie RowColEnter (1- ) for Graph (Choose (Bar=1, Line=2, Pie=3) for Graph 0ASbAA@P? CYdx$&BCqFVDQEqQ8C@4(D"!VD&AAAAAA17b5!$A ~+S XÉ; ~Ë ,\ u s @;sË C'?uu gӻFӺ s ػ/Ӻӻ@s#VBAAA AC$x0b`!BWACc9'C%b&2BQPP8CB(0P"C(F9@E3SxAIy&cypË t CCˆ CCËst t  yËھ*Ȁ?trSGGFFWVQgY^_[C[XP;r hڋ[XS<u"FFȸ+ NN$WNNV$&SP٣ Z]^[MII+R&ZKK +MMVu [YX uyQSSp[SۻT[S޻ Vעs`V۹QL޻pFۻ\޻Tx޻Lܻ\'Y[|Y$K'SӻNsv[IS[SٿLhgT T;[SPTXx t*r PSV^[XF>KtLSݻh[[ݠK [uXByNLSA[SgF\STLD[KڹdHdݻCuݿL$ݹ<+dۻ\ڻLiݠB,AۻpػٻL[Hݏ@@e@@"r&@t&RlWK 6Ji]U^8w>^:sƋ^H^:HvƋ^H^:Hru]Uv<@._G PG @ÍG PˍG GPGG PG P.9J]Uv<@X\GXu\G \G\]UPs]á<` PC8 ㋇`8 <`G`GX`G`G`GP`G PPL <]UP>.u<. <X<XùXGv<@]UFH>t68s 6]U~v2F9w 6s6}6s]U>t/;vPs6桸<G6{]U~r@]UFPs5FPPPevXGXOXOdXG PXG PP <]U<d PEhPdP P < ]U<^PX^^G^GF^G<^G<]U8+ȉ;<sPF>0u0 bbPbGPPPPD PM ]U P]U츸P6J PNhP#P@6+<1>?wF㋇>t+;vPg6<˃s>u]6cH;w/΋<>P 8]U^Pv>Vu <XG <V<VFVGFVGvVGP^P <]U^8+ȉ;<sPo>>u> RRFRGRG^P6RDPP RGRGu sŋ>uu/PG Pu/PG>uH9w~6<Ë"¢*ΠD O:D v 6G PGs@PP PU ^@P6RD@PPP P PRG PP R8]Uvvs NT<T^ P8 ㋇T8 <TGTGXTGTGTGvTG P^P! <]U~u00#Prx^R6J s]U6+<1XG>t+;vP6桾<˃>u]6]U6+<1.>t+;vP76桼<˃>u]+;FsG]U>u PhP ]U8+ȉ;<sP >,u, ZZùZOZOPZGPPO 8]U8;:s:]Us-Pi P  >Yu >Nu6:H;w/΋<>u. sŋ]U>t#$F:D v *P]UP<V>u];wDVu$GPVw&PVGP,6<Vs}]U<]]U F1 ;w-vvt Pv F^G! u^G!]U9rNQPPFN ]UFPFP]U^7  ^:sp ]UtPqNP6P]&؜[Ѝ&S COPYRIGHT (C) DIGITAL RESEARCH, 1982, 1983 01/V;wIVG:Fu's @=VwVGP6<Vs]UP-P]UPPn]U츻P6I ?PhPB s.X>Xt|XG P9@ ? A s X:G w -PuqU^G!f F1 ;w4vvmt> uPv F^G! u]U>u PP @;rK P6hPjK C s6  ]UPY ]U  u ]s  ]15/83 XZYPU>Xuv#>Yuv#v)~ u,~ t :E r>Yu Ph#]U P P]UFȈF;Xz/6I {s]UPwPvXG PUNGÍG PB]U<F;8vPc]YQU8 ㋇N>Nt&'s6NG Ps]ËNа]UZ>(v PP8 8 :s4*< r<~w  PP 8 à8 @18 ]UF1F;fr1f9rK P6hPHF+fFH]U11]UNPP]U^?t%^8wpu]YQU?t@P:PP t .PP]UFȈFuNGP<t@YPt@Y ]ËNG:t@]UvPm]UvP]]UPsN\Àu Pt]á<\ P8 ㋇\8 <\G\G\G P\G PP<]U\GL PP]UNPPP]Ý.츫P;'hPP$P>; =u >; t= s< s> s U= C '0V&t]U>>t? ]Uh]U]Uv0]U~sPv%v v]U~sPvvhPyXG PMFsx]UPev)hPCW]UKFȊK:w΋^:FuKu۰]U8 L^8wsP,n1]U:F >t PP]U>vF ]ULJU]U]U]U? < s>vj]]U? < r__^t:uP>^uPR>^tNF F PP$PZwhP PtPPP8hPbfPhP$P]U,ZZ t!Ãtww(Z]UT:Ft PhP]U,,>t"vGPsË԰]U;vP"6<LwLƊ@8 Luߠ8 @18 ]U졶HN>Nu@NPK u@Y"sNڸ/P: s<PPNK uNN;s K #?P=`]UvP PvG9F JF HF@ sPPP]< s6\PY]p]UA < sS>vGF PHsN`]U@>@t@P>u@Y"s)GPGP<s@Ƌ뻠@s GP']UA>At@P>u@Y"s,0GPGPsAË븠As GP]U8+<HK >t> u]U>u6PPvus6Nsut]t6,s%>t(rtƊut!]U>uu]g]Uu:Ft[]U>ttWt8wGƊuP.A sPPP< s6`P@] ]U>u-]À>nu)]À>u%]À>u@]À>u]À>uQ]]U2@,B&D]UX@H9Xw OXsb]U,Z>ZtZGZGZ1]UE]U 1>>uGP}shuGGGPu8uo)uu GPh>t]U<,>>;s%Ƌ<6><>ҋ]UP*t@Z P?t@Z P r@Y su]Un>tv]U>tvu]U>tv>uAs>uPvu,A]U^P$PP^GP P P>:u^puP^GP6t&>.ufuP^G P6t]UvWv]U P;]U찤PP6J^6W6P]ULJ@ZQP.P>PtPG P5PZ;tP]U차PJ@PP.P>PtPwPGPP?]UHFJ@\QP.P>Pt3C }>@u]6B6D^PbwPYPP]U,>huH hhP C q >ughP ]U> ? @ A B < = I J H 9 : D OE <PK PP;ƇK .JFLH<`4`8>>tRG:Ft]Uv[PtPvFs>u-uROatPP'T>ut>u]t >u,t]UP]UP]UPh[P%tPP>u=u1PP>Y uPYPP2PPRGP P >ut>u]u]À>u,t/PG\>\t\G P\GP3P\;tP]6:PPPM]U,sP >K uKPPPP PP PPPPP ]UqPKPPrPPPdP P v= ]U<+46+:P6+4d1@X1BP^BPh%P ]U,A<v@]Us ,A]]Us ,A]À>XuX]À>YuY]]U>MuI !>OuH >XuJ <,t<t<]u]]U>q u vqPP=]U층PhPP$P!P1K P6P :Cross-reference Listing of File: $ Symbol Name /Segment Name/ Modules where references occur (# = symbol defined) -------------- ---------------------------------------]UF;FvFȈF ws]u۰ ]U%.y#wA 99 s9 _> ? @ A OB H@  <? > 0+< $k7####4------------ $Module Map of File: $ SEGMENTS $ PUBLICS$ EXTERNALS$ STOP LIB-86 (Y/N)?$08CJOXajs}DELETEEXTERNALSINPUTMAPMODULESNOALPHAPUBLICSREPLACESEGMENTSSELECTXREF$ =.:-[],()$ CANNOT CLOSE$DIRF]U P P]UFȈFIwIõIu8]UcPov#]YDQUD?t@#\#D#K#R#W#c#h#o#t#>ut>u]u]À>u,tS]U>u68]UhP3P>u[uCu; ]U9 s9 >; t7>; =tP ]UPPT]UPPE]UPFP4]UPFP!]U PP]U PECTORY FULL$NO FILE$RENAME ERROR$badrecRHEADRREGINTREDATARIDATAOVLDEFENDRECBLKDEFBLKENDDEBSYMTHEADRLHEADRPEDATAPIDATACOMENTMODENDEXTDEFTYPDEFPUBDEFLOCSYMLINNUMLNAMESSEGDEFGRPDEFFIXUPP(NONE)LEDATALIDATALIBHEDLIBNAMLIBLOCLIBDICDISK READ ERROR$DISK FULL$INVAP:PJPD t .PP]UFȈF$USE FACTOR: $Number of Modules: $----- #TITLE "NEC-APC Smart Screen Driver Interface" #SUBTTL "For the TurboDOS operating system" #PAGE 132,66 ; ; SCRAPC.A ; ; Version date: 8/18/84 ; ; Edit History: ; 7/12/84 dds Module Created. ; 8/18/84 dds Added cursor delayed enable featu--------------------------------------------- LIB-86 Library Manager Version 1.0 Serial No. 3077-0000-000359 All Rights Reserved Copyright (C) 1982,1983 Digital Research, Inc. -------------------------------------------------- After booting into CP/M-86, enter the command: A>OSLOAD OSMASTER.SYS This will boot up TurboDOS. re ; MODULE "SCRAPC" ; module ID ; #INCLUDE "DREQUATE" ; common driver equivalences #INCLUDE "APCEQU" ; common NEC-APC equivalences ; ; Some screen parameters ; NMBROWS == 26 ; number of user rows NMBCOLS == 80 ; number of user columns  $OBJINPXRFMAPL86$$$ STATROW == 25 ; status row CSRCNT == 2 ; delay in ticks for cursor displaying ; ATTROFF == 0X1000 ; attribute memory offset constant ; ; GDC status register definition ; DR == 1<<0 ; data ready in FIFO FF == 1<<1 ; FIFO full FE == 1<<2  ; FIFO empty DW == 1<<3 ; drawing in progress DMA == 1<<4 ; DMA execute VS == 1<<5 ; vertical sync active HB == 1<<6 ; horizontal blank active ; ; GDC commands ; RESET == 0X00 ; reset controller SYNC == 0X0E ; SYNC format specify VSYNC == 0X6E ; vertical SYNC mode CCHAR == 0X4B ; cursor and char characteristics START == 0X6B ; start display and end idle mode BCTRL == 0X0C ; display blanking control ZOOM == 0X46 ; zoom factor control CURS == 0X49 ; cursor position specify PRAM == 0X70 ; parameter RAM load PITCH == 0X47 ; pitch specification WDAT == 0X20 ; write DATA into display memory MASK == 0X4A ; mask register load FIGS == 0X4C ; figure drawing parameters specify FIGD == 0X6C ; figure draw start RDAT == 0XA0 ; data read commands CURD == 0XE0 ; cursor address read DMAR == 0XA4 ; DMA read request DMAW == 0X24 ; DMA write request ; ; LOC Data# ; locate in data segment ; ; User defined tab size. ; NOTE: Set to desired tab size 2 through 16. ; TABSIZ::BYTE 8 ; default tab size ; ; User defined start up cursor mode. ; NOTE: 0 = non-displayed, 1&2 = blinking block, 3&4= blinking underline. ; CURSOR::BYTE 2 ; default cursor mode ; ; User defined status line enable. ; NOTE: