IMD 1.18: 6/11/2012 11:11:14 televideo systems ts802 ver 2.0 cbios      xNG 22*y[wKu(% *y[wKu>>2À>2{:A2[!@:|Oˑ:8<2}y2|:~>2~@ x w(!=:|2|>2|x2!|͓:!_6>>~Of#N#F#ͪ!!~#G:(O ^#V:{ !6!;!:|W(6261!:i!$:}i!3:i!yw#yw 007m<͗χm<͗χ#L G TELEVIDEO SYSTEM TS-802 V2.0 62k CP/M vers 2.2 Boot Error. :q71@>y>y!ia>y>>s@ .#{%8,}>s@ }{8y>s@ >>>>= G @>y>y!ia>y>>s@ .#{%8,}>s@ }{8y>s@ >>>>= G  ERROR: SIDE# 9, TRACK# , SECTOR# 89, FDC STATUS READ WRITE Check the disk in drive "", and close the door. )E/kUH?!+!M9>%6̓!+!9>%6̓f+*k7||*::<269269Â*!*͂+!+͂+*m    ݇!2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(! ! ~ 3#0 Wx x ހ ނ G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x =qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUBx: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD# >##$$(ɯ=G>=12  x >2~ [f (y!W(y 1[[f yˇ:G_!4#G(!("{ #W(>!x(8#W(y!~(8w o>#͘*~ "޷"͌#>?͌͘ =_.:;<> Oޅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧ"C{2!"E9"1A22!ty)K!G_^#V*C~E ,&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~62E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*/ɯ!:>#G>>ɯ: 22!y2o&))))y2y2C`iɯ2>22>22y2 >2:2:2:2:(4=2:! ':! :! 4~H8 6:<222<22:2!~6(%:! :! :!(*:\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ܯ2#~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3߯21y_͸2y2ͽ:ܷ˜1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^:ÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q O͐  :E B 2>: b# : y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# dÀ%OÈ|p+AFKSgP(C) 1981, TELEVIDEO SYSTEMS INC.1!2|2>2T1> 2~2ͪ+!,MDKJAKFS(!~5 !{H8 K>2!"2!"222:O(f:2:2:2:(_2:g.<[: >2:(:ɯ2f>!>!2{":!|ēb> 2}*ͻ :{ ::!}~5( :!:O ~G:w>>= CuSw"y>2{2 :{   7|ʷ*>,ͧE::<>,D::<269269!+͂+f+*ͪ*)9|*Q*6:X:*>ͧE ELENo Fatal error(s) Warning(s):L8G)+!8+͂+Rf+REPT/IRP/IRPC/MACROUnterminated +!+͂+R> ̓> ̓::<> D> D!L+:: w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ><×@ConditionalSymbols: Macros: :9!"9"9*9+!9!*94zW{_6 >+<292929*9$6 ,"9%5!95ð+~<=8,:9<2: Macros: :9!"9"9*9+!9!*94zW{_6 >+<292929*9$6 ,"9%5!9 ERROR: SIDE# 9, TRACK# , SECTOR# 89, FDC STATUS READ WRITE Check the disk in drive "", and close the door. )E/kUH?!+!M9>%6̓!+!9>%6̓f+*k7||*::<269269Â*!*͂+!+͂+*m):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2       802FBIOSCRF 802FBIOSCRF802FBIOSCRF !"#$%&802FBIOSCRF'()*+,-.802FBIOSCRF/0123456802FBIOSCRFD789:;802FBIOSREL802FDATABAK.802FEQU BAK+802FBOOTMAC802FCONSMAC>802FDISKMAC;802FSUBSMACG802FEQU MAC+ ; COPYRIGHT (C) 1981  ; TELEVIDEO SYSTEMS INC.  ; 1170 MORSE AVENUE  ; SUNNYVALE, CA 94086  ; (408) 745-776ETAILED ERROR MESSAGE  ; -- DISK DRIVE MOTOR & LIGHT OFF WHEN UNUSED  ; -- NO SEEK ON THE SAME TRACK  ; -- NO SELECT DRIVE FOR THE SAME  ems Incorporated Proprietary Information.  ; This listing is supplied under the terms of a license  ; agreement with TeleVideo Systems Incorporated and may  COMSTAT MACTSIBOOT COM802FBIOSPRN<=>?@ABCCPM62 COM,802FBIOSPRNDEFGHIJK802FBIOSPRNLMNOPQRS802FBIOSPRNTUVWXYZ[802FBIOSPRN\]^_`abc802FDATAMAC.802FBIOSMAC0   ; VERSION V2.0 (RELEASE)   ; 7-24-81 SUNG WOO LEE  ; - SIGN-ON MESSAGE CHANGE   ; -- PRINTER INTERFACE WITH EPSON SERIAL AS DEFAULT  ; -- SIO #1 ADDED TO SERVE FOR PRINTER THROUGH CH. B   ; 12-10-81 SUNG WOO LEE ; not be copied nor disclosed except in accordance with  ; the terms of that agreement.    TITLE 802FBIOS.MAC--TELEVIDEO 802FBIOSPRNdefghijk802FBIOSPRNlmnopqrs802FBIOSPRNtuMAKESYS COMvTEST ASMwTEST1 ASMx802FBIOSCRF 802FBIOSCOM 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1   ; CBIOS FOR TELEVIDEO TS-802 SYSTEM     ; 8-25-81 SUNG WOO LEE  ; - ENHANCEMENT FOR REV. B  ; -- DRIVE DOOR OPEN MESSAGE  ; -- D ; - REMOVED CTC CH #1 INITIALIZATION ROUTINE NOT TO CHANGE  ; THE BAUD RATE SET UP BY PROM FOR PRINTER   ; TeleVideo SystSYSTEM TS-802 CBIOS -- AUG. 25, 1981    .Z80  0000' CSEG  .PHASE 0F200H       ;********************************  ; THE FOLLOWING EQUATES ARE KEPT*  ; ISOLATED FROM THE REST FOR *  ; PURMAC--BOOTSTRAP MODULE  PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-2 802FBOOT.MAC--BOOTSTRAP MODULE   CC3 F37C C JP PUNCH READER F215 C3 F370 C JP READER HOME F218 C3 F41D C JP HOME SELDSK F21B C3 F42B C JP SELDSK SETTRK F21E C3 F441 C JP SETTRK SETSEC F221 C C3 F417 C JP UNUSED  C  C ; COPYRIGHT STATEMENT  C  F242 28 43 29 20 C DEFM '(C) 1981, TELEVIDEO SYSTEMS INC.'  F246 31 39 38  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-3 802FBOOT.MAC--BOOTSTRAP MODULE  C ; COME HERE FROM COLDSTART LOADER  C BOOTPR LD (LOGDRV),A  F276 3E 15 C LD A,00010101B ; INITIALIZE IOBYTE IOBYTE F278 32 0003 C LD (IOBYTE),A HDWINI F27B CD F6F5 C CALL HDWINI ; INITIALIZE SYSTEM HARDWARE GOCPM F27E 18 54 POSES OF MOVCPM GENERATION.* 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-1  ;********************************  CPMBASBDOSLN DC00  INCLUDE 802FBOOT.MAC  C  C ; **************** BIOS JUMP TABLE *****************  C BIOSBOOT F200 C3 F264 C BIOS: JP BOOT WBOOT F23 F446 C JP SETSEC SETDMA F224 C3 F44B C JP SETDMA READ F227 C3 F453 C JP READ WRITE F22A C3 F467 C JP WRITE LISTST F22D C3 F3ED C JP LISTST SECTRN F230 C3 31 C  F24A 2C 20 54 45 C  F24E 4C 45 56 49 C  F252 44 45 4F 20 C  F256 53 59 53 54 C  F25A 45 4D 53 20 C  F25E 49 4E 43 2E C  C OMSW F264 D3 04 C BOOT: OUT (PROMSW),A ; SHUT PROM OFF (DEBUG) CPMBUF F266 31 0100 C LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER SIGNON F269 21 F7AF C LD HL,SIGNON ; PRINT SIGNON MESSAGE PRTMSG  C JR GOCPM ; DO MORE INITIALIZATION  C  C ; WE JUMP TO HERE WHENEVER THE USER WANTS  C ; TO RESTART THE SYSTEM, I. E., REREAD CP/M   CPMBAS EQU $-BDOSLN ; BASE OF CP/M (CCP) BDOSCPMBASCCPLEN E406 BDOS EQU CPMBAS+CCPLEN+6 ; ADDRESS OF BDOS ENTRY   SUBTTL 802FBOOT.03 C3 F280 C JP WBOOT CONST F206 C3 F2FF C JP CONST CONIN F209 C3 F325 C JP CONIN CONOUT F20C C3 F34F C JP CONOUT LIST F20F C3 F388 C JP LIST PUNCH F212 F450 C JP SECTRN UNUSED F233 C3 F417 C JP UNUSED UNUSED F236 C3 F417 C JP UNUSED UNUSED F239 C3 F417 C JP UNUSED UNUSED F23C C3 F417 C JP UNUSED UNUSED F23F   C ; VERSION AND REVISION NO.  C VER F262 02 C VER: DEFB 2 REV F263 00 C REV: DEFB 0  C   F26C CD F6E4 C CALL PRTMSG  C  F26F AF C XOR A ; MAKE LOGGED DRIVE 0 DRIVE F270 32 F876 C LD (DRIVE),A ; SAVE IT FOR LATER LOGDRV F273 32 0004 C  C ; WITHOUT MODIFYING THE BIOS  C WBOOTCPMBUF F280 31 0100 C WBOOT: LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER NOTRYS F283 3E 0A C LD A,NOTRYS ; NUMBER OF RETRIES FOR BO   OT BOOTRY F285 32 F978 C LD (BOOTRY),A ; STORE IT.  F288 AF C XOR A ; PREVENT BUFFER FLUSH HSTACT F289 32 F983 C LD (HSTACT),A ; CONDITION ON WRITE ERROR  C , E=INITIAL SECTOR BDOSLNRECLEN F29A 06 2C C LD B,BDOSLN/RECLEN ; LENGTH OF TRANSFER, IN SECTORS  C WBOO20 F29C C5 C WBOO20: PUSH BC ; SAVE REGISTERS  F29D E5  F2AC CD F453 C CALL READ ; READ A SECTOR WBOO30 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-4 802FBOOT.MAC--BOOTSTRAP MODULE  F2AF 28 11 C JR Z,WBOO30 ; READ SUC C JR $ ; AND DIE.  C WBOO30 F2C2 D1 C WBOO30: POP DE ; ADJUST TRACK AND SECTOR  F2C3 1C C INC E ; BUMP SECTOR NO.  F2C4 7B C LD A,E SPT0 eY h aL7Ɇ%y6!>D(@  " |(3=Xd|:A>FH[Հ!#3 ,:HC.5@H@FHG˭ڰ#/ :DVxfB{ _"#t|Nυ&fWBOO10RESDSK F28C CD F6AA C WBOO10: CALL RESDSK ; RESET DISK SUBSYSTEM  C  C ; INITIALIZE THE TRANSFER PARAMETERS  C  F28F 0E 00  C PUSH HL  F29E D5 C PUSH DE  F29F 4D C LD C,L ; MOVE TRANSFER ADDRESS TO BC  F2A0 44 C LD B,H SETDMA F2A1 CD F44B C CALL SETDMA ; SET DATA TRANSFER ADDRESCESSFUL  F2B1 D1 C POP DE ; ELSE RETORE REGISTERS  F2B2 E1 C POP HL  F2B3 C1 C POP BC BOOTRY F2B4 21 F978 C LD HL,BOOTRY ; CHECK ON RETRY SITUATION  F2B7 35  F2C5 FE 48 C CP SPT0 ; END OF CURRENT TRACK? WBOO40 F2C7 38 03 C JR C,WBOO40 ; NO.  F2C9 1E 00 C LD E,0 ; CYCLE THE SECTOR NO.  F2CB 14 C INC D ; AND INCREMENT THE TPi->a "@P  E2BFH7' kÏ06b6؍$ %{%^=d8Yb<@ђ @" õ s,k-00fbiY-{,(}Z`K5 ^aaz3_`!mz5fgQy_/1Ì;L820$t|"6l8P,sٚz㣫fޢ([Ye5[+0fKn#O0t| \|i0Ǣ봆o|;JgmH, GGW  a9eAn /Q-_YfO1e*9K7Qf^aC,bȪ #ْ: C LD C,0 ; SELECT DRIVE ZERO SELDSK F291 CD F42B C CALL SELDSK ; FROM WHICH TO BOOT CPMBAS F294 21 DC00 C LD HL,CPMBAS ; INITIAL DMA ADDRESS  F297 11 0002 C LD DE,0002H ; D=INITIAL TRACKS  F2A4 4A C LD C,D SETTRK F2A5 CD F441 C CALL SETTRK ; SET TRACK REGISTER TO D  F2A8 4B C LD C,E SETSEC F2A9 CD F446 C CALL SETSEC ; SET SECTOR REGISTER TO E READ C DEC (HL) WBOO10 F2B8 20 D2 C JR NZ,WBOO10 ; MORE TRIES LEFT. BOOMSG F2BA 21 F7E3 C LD HL,BOOMSG ; PRINT ERROR MESSAGE PRTMSG F2BD CD F6E4 C CALL PRTMSG  F2C0 18 FE RACK  C WBOO40 F2CC E1 C WBOO40: POP HL ; RECALL THE TRANSFER ADDRESS RECLEN F2CD 01 0080 C LD BC,RECLEN ; ADD IN A SECTOR  F2D0 09 C ADD HL,BC  F2D1 0D{_,(}m1` x_ lF+G1!dbw :ٯH4WGHG@ *4 `R)O/$2>Y'vѯIWd|Od|ُEx<@HW!#d|ϑ!:BV⁠d| ;>I초F[E4#2;>Za0 'g; q@!Xϖa> ϖ` < IW{2GGȅ/|i%m0Ad{4FYYBf̗ ~P`\ /ζ::_B0|b"{@jB|ϖY\P !B|   i!>Gw4_Kc{^ovkz{4;,ӛs 0d쐀=m 5"E38@6A|zF  @h(E&JĒ! )JeB)4@T)G2  !r9B4Fy@E9!p4@)HO)2I#KBAHC%@a`E! !Z@ ,1LA C GOCPMCPMBUF F2D4 01 0080 C GOCPM: LD BC,CPMBUF ; INITIALIZE DMA ADDRESS SETDMA F2D7 CD F44B C CALL SETDMA JP F2DA 3E C3 C LD A,JP ; INITIALIZE LOW MEMORY  F2DC 32CNT F2F2 32 F985 C LD (UNACNT),A ; UNALLOCATED SECTOR COUNT HSTACT F2F5 32 F983 C LD (HSTACT),A ; BUFFER INACTIVE LOGDRV F2F8 3A 0004 C LD A,(LOGDRV) ; PASS LOGGED DRIVE NO.  F2FB 4F -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-6 802FCONS.MAC--CONSOLE I/O MODULE   C INCLUDE 802FCONS.MAC  C  C ; TEST TH CRTST F305 F31C C DEFW CRTST ; CONSOLE CRT DEVICE BATST F307 F41B C DEFW BATST ; CONSOLE BATCH DEVICE UC1ST F309 F41B C DEFW UC1ST ; USER DEFINED CONSOLE  C CHECK TRANSMITT READY AND CTS  F313 FE 24 C CP 00100100B ; READY TO SEND? TTYS1 F315 28 02 C JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION  F317 AF C XOR A ; NO, SET NOT READY CONDITION *Jb ix0E r$Ef) : !kM!v2R`a@a73ae Qo9 k4|&_ȥ|&_W=HP~@-)S嬠Pyk<Z-y_寠yk<[-a尠`yl8< [-Ńc屠yl CHARACTER AVAILABLE  C ; A=0 -> NO CHARACTER    C ; PRINTER STATUS ROUTINE FOR SERIAL  C ; INTERFACE WITH EPSON AND TI  C ; SIO #1 CHANNEL B  C TTYST F30B 3E 10   F318 C9 C RET  C TTYS1 F319 AF C TTYS1: XOR A  F31A 3D C DEC A ; A = FF  F31B C9 C RET  C   C1 C POP BC ; RESTORE SECTOR COUNT WBOO20 F2D2 10 C8 C DJNZ WBOO20 ; GO READ NEXT SECTOR.  C  C ; CODE SHARED BY BOTH WARM AND COLD STARTS   LD HL,BDOS ; BDOS ENTRY POINT  F2EB 22 0006 C LD (0006H),HL ; STORE IT  F2EE AF C XOR A ; CLEAR SERIAL PRINTER BUFFER COUNT UL1CNT F2EF 32 FA91 C LD (UL1CNT),A ; ON COLD OR WARM START UNA2 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-5 802FCONS.MAC--CONSOLE I/O MODULE  SUBTTL 802FCONS.MAC--CONSOLE I/O MODULE  PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS  C CONSTIODISP F2FF CD F6FF C CONST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE  F302 00 C DEFB 0 ; CONSOLE POSITION IN IOBYTE TTYST F303 F30B C DEFW TTYST ; CONSOLE PRINTER DEVICE C TTYST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND SIOBC1 F30D D3 23 C OUT (SIOBC1),A ; SEND OUT SIOBC1 F30F DB 23 C IN A,(SIOBC1) ; READ SIO STATUS  F311 E6 24 C AND 00100100B ;  C ; CONSOLE STATUS ROUTINE FOR STANDARD  C ; CRT TERMINAL DEVICE, SIO #0 CHANNEL B.  C CRTSTSIOBC0 F31C DB 0F C CRTST: IN A,(SIOBC0) ; READ SIO    STATUS RCVRDY F31E CB 47 C BIT RCVRDY,A ; CHARACTER AVAILABLE?  F320 3E 00 C LD A,0  F322 C8 C RET Z ; NO. A = 0  C  F323 3D C DEC  C DEFB 0 ; CONSOLE POSITION IN IOBYTE TTYIN F329 F331 C DEFW TTYIN ; CONSOLE PRINTER DEVICE CRTIN F32B F332 C DEFW CRTIN ; CONSOLE CRT DEVICE BATIN F32D F418 C DEFW BATIN C ; MOTOR AND LIGHT OFF IN HALF A SECOND  C ; WHEN THERE IS NO INPUT ON CONSOLE  C CRTIN F332 C5 C CRTIN: PUSH BC  F333 01 8000 C LD BC,80DD),A ; SEND OUT MOTFLG F344 32 F878 C LD (MOTFLG),A ; MOTOR ON-OFF FLAG CRT20 F347 18 ED C JR CRT20 ; LOOP UNTIL WE GET A CHARACTER CRT10SIOBD0 F349 DB 0D C CRT10: IN A,(SIOBD0) ; FETCH THE CONSOLE POSITION IN IOBYTE TTYOUT F353 F35B C DEFW TTYOUT ; CONSOLE PRINTER DEVICE CRTOUT F355 F366 C DEFW CRTOUT ; CONSOLE CRT DEVICE BATOUT F357 F418 C DEFW BATOUT ; CONSOLE BATCH DR TTYOUT F35E 28 FB C JR Z,TTYOUT ; NOT READY, LOOP BACK  F360 79 C LD A,C ; GET CHARACTER IN REG. C  F361 E6 7F C AND 7FH ; STRIP OFF PARITY SIOBD1 F363 D3 21 C OUTA ; YES. A = FFH  F324 C9 C RET  C  C ; GRAB A CHARACTER FROM CONSOLE INPUT.  C ; EXIT: A=RETURNED CHARACTER 802FBIOS.MAC--TELEVIDEO SY ; CONSOLE BATCH DEVICE UC1IN F32F F418 C DEFW UC1IN ; USER DEFINED CONSOLE  C  C ; JUST RETURN FOR NOW  C TTYIN F331 C9 00H ; TIME-OUT FOR 1/2 SECOND CRT20CRTST F336 CD F31C C CRT20: CALL CRTST ; CHECK THE STATUS CRT10 F339 20 0E C JR NZ,CRT10 ; SKIP  F33B 0B C DEC BC ; COUNT DOWN  F33C 78  CHARACTER  F34B E6 7F C AND 7FH ; STRIP OFF PARITY BIT  F34D C1 C POP BC  F34E C9 C RET  C  C ; OUTPUT A CHARACTER TO THEEVICE UC1OUT F359 F418 C DEFW UC1OUT ; USER DEFINED CONSOLE  C  C ; OUTPUT ROUTINE FOR SERIAL EPSON AND TI PRINTER 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG.  (SIOBD1),A ; SEND OUT  F365 C9 C RET  C  C ; OUTPUT ROUTINE FOR STANDARD  C ; CRT TERMINAL DEVICE, SIO  C STEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-7 802FCONS.MAC--CONSOLE I/O MODULE  C CONINIODISP F325 CD F6FF C CONIN: CALL IODISP ; DIRECT I/O TO PROPER DEVICE  F328 00  C TTYIN: RET  C  C ; CONSOLE INPUT ROUTINE FOR  C ; STANDARD CRT TERMINAL DEVICE.  C ; SIO CHANNEL B.   C LD A,B ; BC REACHED ZERO?  F33D B1 C OR C CRT20 F33E 20 F6 C JR NZ,CRT20 ; NO, LOOP BACK  F340 3E 00 C LD A,0 ; MOTOR AND LIGHT OFF FDD F342 D3 18 C OUT (F CONSOLE.  C ; ENTRY: C=CHARACTER TO BE OUTPUT  C CONOUTIODISP F34F CD F6FF C CONOUT: CALL IODISP ; DIRECT I/O TO PROPER DEVICE  F352 00 C DEFB 0 ;25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-8 802FCONS.MAC--CONSOLE I/O MODULE  C ; SIO CHANNEL A.  C TTYOUTTTYST F35B CD F30B C TTYOUT: CALL TTYST ; CHECK STATUS OF PRINTE; CHANNEL B.  C CRTOUTSIOBC0 F366 DB 0F C CRTOUT: IN A,(SIOBC0) ; CHECK STATUS OF TRANSMITTER TRXRDY F368 CB 57 C BIT TRXRDY,A ; TRANSMITTER BUFFER EMPTY? CRTOUT F36A 28 FA     C JR Z,CRTOUT ; NOT YET.  F36C 79 C LD A,C ; TRANSFER THE CHARACTER SIOBD0 F36D D3 0D C OUT (SIOBD0),A ; OUTPUT THE CHARACTER TO SIO  F36F C9 C RET  F378 F418 C DEFW UR1RDR ; USER DEFINED READER #1 UR2RDR F37A F418 C DEFW UR2RDR ; USER DEFINED READER #2  C  C  C ;18 C DEFW UP1PUN ; USER DEFINED PUNCH #1 UP2PUN F386 F418 C DEFW UP2PUN ; USER DEFINED PUNCH #2  C  C ; SEND A CHARACTER TO THE PARALLEL PORT.   DEFW TTYOUT ; OUTPUT TO TELETYPE DEVICE CRTOUT F38E F366 C DEFW CRTOUT ; OUTPUT TO CRT DEVICE LPTLST F390 F394 C DEFW LPTLST ; LINE PRINTER DEVICE UL1LST F392 F3A9 C DEFW UL1LST  OUT (PIOBD),A ; INTO PIO CHANNEL B DATA REG. PIOAD F39C DB 1C C IN A,(PIOAD) ; READ PRINTER CONTROL LINES STROBE F39E CB 87 C RES STROBE,A ; PULSE THE STROBE LINE PIOAD F3A0 D3 1C C OUT (  C ; THE DEVICE ON THE OTHER END TO SUPPORT AN ETX/ACK  C ; PROTOCOL. PORT USED IS SIO CHANNEL A.  C UL1LSTUL1SIZ F3A9 3A F8A8 C UL1LST: LD A C  C ; PAPER TAPE READER ROUTINE,  C ; MOSTLY UNUSED.  C READERIODISP F370 CD F6FF C READER: CALL IODISP ; DIRECT I/O TO PROPER DE PAPER TAPE PUNCH ROUTINE,  C ; CURRENTLY DUMMIED OUT,  C ; PRETTY MUCH.  C PUNCHIODISP F37C CD F6FF C PUNCH: CALL IODISP ; DIRECT I/O TO PRO C ; THIS PORT HAS A STANDARD CENTRONICS INTERFACE.  C ; ENTRY: C=CHARACTER TO BE OUTPUT  C LISTIODISP 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MA; USER DEFINED PRINTING DEVICE  C  C ; THIS IS THE PRINTER OUTPUT ROUTINE  C ; FOR THE CENTRONICS PARALLEL DEVICE.  C LPTLSTLPTPIOAD),A ; TO INDICATE THAT DATA IS PIOAD F3A2 DB 1C C IN A,(PIOAD) ; VALID IN CHANNEL B DATA PORT STROBE F3A4 CB C7 C SET STROBE,A ; RAISE STROBE LINE AGAIN PIOAD F3A6 D3 1C C OUT (PIOAD),A,(UL1SIZ) ; SIZE OF PRINTER BUFFER.  F3AC 47 C LD B,A ; FOR LATER.  F3AD B7 C OR A ; CLEAR CARRY  F3AE 1F C RRA ; DIVIDE BY 2  F3AF 5F C LD E,A ; E <- UL1SVICE  F373 02 C DEFB 2 ; POSITION OF READER IN IOBYTE TTYIN F374 F331 C DEFW TTYIN ; STANDARD TELETYPE DEVICE PTRRDR F376 F418 C DEFW PTRRDR ; HIGH SPEED PAPER TAPE READER UR1RDR PER DEVICE  F37F 04 C DEFB 4 ; PUNCH POSITION IN IOBYTE TTYOUT F380 F35B C DEFW TTYOUT ; TELETYPE OUTPUT PTPPUN F382 F418 C DEFW PTPPUN ; HIGH SPEED PUNCH DEVICE UP1PUN F384 F4CRO-80 3.36 17-Mar-80 PAGE 1-9 802FCONS.MAC--CONSOLE I/O MODULE  F388 CD F6FF C LIST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE  F38B 06 C DEFB 6 ; LIST POSITION IN IOBYTE TTYOUT F38C F35B C LSS F394 CD F3F9 C LPTLST: CALL LPTLSS ; CHECK STATUS LPTLST F397 20 FB C JR NZ,LPTLST ; LOOP UNTIL PRINTER READY  F399 79 C LD A,C ; LOAD THE CHARACTER PIOBD F39A D3 1D C  ; COMPLETE STROBE SIGNAL  F3A8 C9 C RET  C  C  C  C ; HERE IS THE SERIAL PRINTER DRIVER, WHICH EXPECTS IZ/2 UL1CNT F3B0 21 FA91 C LD HL,UL1CNT ; CURRENT BUFFER COUNT  F3B3 34 C INC (HL) ; BUMP IT.  C UL1L10SIOBC1 F3B4 DB 23 C UL1L10: IN A,(SIOBC1) ; READ STAT   US RCVRDY F3B6 CB 47 C BIT RCVRDY,A ; DO WE HAVE AN INPUT CHARACTER? UL1L20 F3B8 28 08 C JR Z,UL1L20 ; NO. SEND CHARACTER. SIOBD1 F3BA DB 21 C IN A,(SIOBD1) ; GRAB THE CHARACTER.  F3BC .MAC--CONSOLE I/O MODULE  C UL1L30SIOBC1 F3C6 DB 23 C UL1L30: IN A,(SIOBC1) ; PREPARE FOR OUTPUT. TRXRDY F3C8 CB 57 C BIT TRXRDY,A ; CAN WE OUTPUT? UL1L30 F3CA 28 FA 0 ; FULL, SO SEND ANOTHER ETX UL1L10 F3D6 38 DC C JR C,UL1L10 ; OVERFLOW, WAIT FOR ACK.  C UL1L50SIOBC1 F3D8 DB 23 C UL1L50: IN A,(SIOBC1) ; THIS IS THE REAL OUTPUT TRXRDY F3D(HL) ; DID WE EVER SEND AN ETX?  F3E5 93 C SUB E ; I.E., IS BUFFER > = HALF FULL? UL1L70 F3E6 28 02 C JR Z,UL1L70 ; YES. UL1L50 F3E8 38 EE C JR C,UL1L50 ; NO, SPURIOUS ACK.   C LISTSTIODISP F3ED CD F6FF C LISTST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE  F3F0 06 C DEFB 6 ; LIST POSITION IN IOBYTE TTYST F3F1 F30B C DEFW TTYST ; STATUS OF TELETYPE) IT IS OUT OF PAPER  C ; 2) IT IS BUSY 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-11 802FCONS.MAC--CONSOLE I/O MODULE  C ; 3) A FAULT OCCU E6 7F C AND 7FH ; STIP PARITY. ASCACK F3BE FE 06 C CP ASCACK ; IS IT ACK? UL1L60 F3C0 28 22 C JR Z,UL1L60 ; YES, PROCESS IT. UL1L20 F3C2 7B C UL1L20: LD A,E ; GET UL1SI C JR Z,UL1L30 ; NOT YET. ASCETX F3CC 3E 03 C LD A,ASCETX ; SEND OFF THE END-OF- SIOBD1 F3CE D3 21 C OUT (SIOBD1),A ; BLOCK CHARACTER. UL1L50 F3D0 18 06 C JR UL1L50 ; NOW OUTPUT TA CB 57 C BIT TRXRDY,A ; ROUTINE AND EXIT UL1L50 F3DC 28 FA C JR Z,UL1L50 ; LOOP UNTIL TRANSMITTER READY.  F3DE 79 C LD A,C ; CHARACTER HAS BEEN IN REG. C  F3DF E6 7F C A C UL1L70 F3EA 77 C UL1L70: LD (HL),A ; ADJUST THE BUFFER COUNT UL1L50 F3EB 18 EB C JR UL1L50 ; AND SEND THE CHARACTER.  C  C  DEVICE CRTST F3F3 F31C C DEFW CRTST ; STATUS OF CRT DEVICE LPTLSS F3F5 F3F9 C DEFW LPTLSS ; STATUS OF LINE PRINTER DEVICE UL1LSS F3F7 F404 C DEFW UL1LSS ; STATUS OF USER DEFINED PRINTRED  C LPTLSSPIOAD F3F9 DB 1C C LPTLSS: IN A,(PIOAD) ; READ PRINTER STATUS  C ; AND PIOMSK ; MASK OFF DON'T CARE BITS  C ; XOR PIOERR ; EZ/2  F3C3 BE C CP (HL) ; IS BUFFER HALF-FULL? UL1L40 F3C4 20 0C C JR NZ,UL1L40 ; NO, NO NEED FOR ETX. 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-10 802FCONSHE CHARACTER  C UL1L40 F3D2 78 C UL1L40: LD A,B ; ORIGINAL BUFFER SIZE  F3D3 BE C CP (HL) ; CHECK FOR FULL AND OVERFLOW. UL1L30 F3D4 28 F0 C JR Z,UL1L3ND 7FH ; ALL THIS TIME. STRIP PARITY. SIOBD1 F3E1 D3 21 C OUT (SIOBD1),A ; SHIP IT!  F3E3 C9 C RET ; ONLY EXIT POINT.  C UL1L60 F3E4 7E C UL1L60: LD A, ; TEST THE STATUS OF THE PRINTER.  C ; THEN RETURN NOT READY FLAG.  C ; EXIT: A=0 -> PRINTER IS NOT READY  C ; A=0FFH -> PRINTER IS READY  ING DEVICE  C  C  C ; PARALLEL PRINTER STATUS CHECK.  C ; RETURNS PRINTER NOT READY BECAUSE:  C ; 1RROR MASK, PRINTER READY?  C ; JR NZ,LPTS10 ; NO.  C ; DEC A ; YES, RETURN FF IN A  C PRTBSY F3FB CB 6F C BIT PRTBSY,A ; TEST PRINTER BUSY    BIT  F3FD 3E 00 C LD A,0  F3FF C0 C RET NZ  F400 2F C CPL ; SET A = FFH AND ZERO FLAG = 1  F401 C9 C RET  C LPTS10 F402 AF (HL) ; ROOM FOR MORE CHARACTER?  F40B 3E FF C LD A,0FFH ; ANTICIPATE AFFIRMATIVE.  F40D C0 C RET NZ ; LISTER IS READY.  C SIOBC1 F40E DB 23 C IN A,(SIOB-PURPOSE  C ; DUMMY ROUTINE, USED FOR UNDEFINED BIOS  C ; HOOKS, AND UNUSED IOBYTE DRIVERS.  C UNUSED F417 C9 C UNUSED: RET ; JUST RETUR C BATOUT: UC1OUT F418 C UC1OUT:  C PTRRDR F418 C PTRRDR: UR1RDR F418 C UR1RDR: UR2RDR F418 C UR F41B C UC1ST:  F41B AF C XOR A ; ALWAYS BUSY  F41C C9 C RET  C  C ; END OF 802FCONS.MAC   HOME: LD A,(HSTWRT) ; CHECK WRITE PENDING DATA IN BUFFER  F420 B7 C OR A HOMED F421 20 03 C JR NZ,HOMED ; IF WRITE DATA PENDING THEN SKIP  C HSTACT F423 32 F983  C LPTS10: XOR A ; INDICATE NOT READY  F403 C9 C RET ; BY RETURNING 0 IN A  C  C ; CHECK THE STATUS OF SERIAL PRINTER,  C C1) ; OTHERWISE SEE IF WE HAVE RCVRDY F410 CB 47 C BIT RCVRDY,A ; AN INPUT CHARACTER READY.  F412 3E FF C LD A,0FFH ; ANTICIPATE AFFIRMATIVE AGAIN.  F414 C0 C RET NZ ; WE ARE ASSUMING CHAN FOR NOW  C  C ; PAPER TAPE READER, PUNCH AND CONSOLE  C ; DUMMY ROUTINES. USER MAY FILL OUT LATER.  C BATIN F418 2RDR:  C PTPPUN F418 C PTPPUN: UP1PUN F418 C UP1PUN: UP2PUN F418 C UP2PUN:  C  F418 3E 1A C   SUBTTL 802FDISK.MAC--DISK I/O MODULE  PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-13 802FDISK.MAC--DISK I/O MODULE   C LD (HSTACT),A  C HOMED F426 AF C HOMED: XOR A SEKTRK F427 32 F97D C LD (SEKTRK),A ; RESET SEEK TRACK TO ZERO  F42A C9 C RET   ; CP/M UL1 DEVICE.  C UL1LSSUL1CNT F404 21 FA91 C UL1LSS: LD HL,UL1CNT ; CURRENT BUFFER COUNT UL1SIZ F407 3A F8A8 C LD A,(UL1SIZ) ; MAX COUNT.  F40A BE C CPR. IS AN ACK.  C  F415 AF C XOR A ; WE MUST NOT BE READY YET  F416 C9 C RET  C  C ; FOLLOWING IS JUST A GENERAL C BATIN: UC1IN F418 C UC1IN:  C BATOUT 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-12 802FCONS.MAC--CONSOLE I/O MODULE  F418  LD A,1AH ; RETURN EOF.  F41A C9 C RET  C  C ; DUMMY CONSOLE STATUS ROUTINES  C BATST F41B C BATST: UC1ST  C INCLUDE 802FDISK.MAC  C  C ; HOME THE HEADS TO TRACK 0  C HOMEHSTWRT F41D 3A F984 C  C  C ; DISK SELECT ENTRY ROUTINE  C ; ACCEPTS: C = DRIVE SELECT (WITH C=0 FOR SELECT DRIVE"A")  C ; RETURNS: HL = DPB POINTER OF DRIVE SELECT (IF C=VALI   D DRIVE NUMBER)  C ; HL = 0H IF (C=INVALID DRIVE NUMBER)  C SELDSK F42B 21 0000 C SELDSK: LD HL,0 ; SET HL = ERROR RETURN CODE  F42E 79 C LD C ADD HL,HL  F43A 29 C ADD HL,HL  F43B 29 C ADD HL,HL ; MULTIPLY BY 16 DPBASE F43C 11 F879 C LD DE,DPBASE ; BASE OF PARAMETER BLOCK  F43F 19 C ADD HL,DE -80 3.36 17-Mar-80 PAGE 1-14 802FDISK.MAC--DISK I/O MODULE  C ; SETSEC -- SET READ/WRITE SECTOR  C ; ACCEPTS: C = SECTOR NUMBER  C SETSEC F446 79 , SET NOT READY CONDITION RET TTYS1: XOR A DEC A ; A = FF RET  ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND? JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION XOR A ; NO\<[>͝72x2y2\(k͝J!5 \2:_:O:O2:_:(͝7!~4G 6!4Ͱ:_!6 #  MAKESYS Ver. 1.0 $Bootstrap Filename? $BDOS Filen A,C SEKDSK F42F 32 F97C C LD (SEKDSK),A ; SAVE DRIVE NUMBER MAXDRV F432 FE 02 C CP MAXDRV+1 ; CHECK FOR VALID DRIVE  F434 D0 C RET NC ; EXIT WITH HL = 0H  C  ; HL=.DPB(CURDSK)  F440 C9 C RET  C  C ; SETTRK -- SET READ/WRITE TRACK  C ; ACCEPTS: C = TRACK NUMBER  C  C SETSEC: LD A,C SEKSEC F447 32 F97E C LD (SEKSEC),A  F44A C9 C RET  C  C ; SETDMA -- SET READ/WRITE DMA BUFFER ADDRESS  name? $MAKESYS Completed. $Destination Drive? $Invalid Drive (Try A or B). $File Not Found.$Unexpected EOF Encountered.$Disk Write Error.$ $COM%:j7 =%:j7 %7:7a& I&T&.>.:.6. 2. ..*.&."....!.$.' .*.-ame? $BIOS Filename? $MAKESYS Completed. $Destination Drive? $Invalid Drive (Try A or B). $File Not Found.$Unexpected EOF Encountered.$Disk Write Error.$ $COM 27*7"7̈́ x]I:(9ä"7=)x†*7y A or B). $File Not Found.$Unexpected EOF Encoun1@>y>y!ia>y>>s@ .#{%8,}>s@ }{8y>s@ >>>>= G @>y>y!ia>y>>s@ .#{%8,}>s@ }{8y>s@ >>>>= G   C ; DRIVE NUMBER IS IN PROPER RANGE  C  F435 6F C LD L,A  F436 26 00 C LD H,0  F438 29 C ADD HL,HL  F439 29  SETTRK F441 79 C SETTRK: LD A,C SEKTRK F442 32 F97D C LD (SEKTRK),A  F445 C9 C RET  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACROTTYST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND OUT (SIOBC1),A ; SEND OUT IN A,(SIOBC1) ; READ SIO STATUS AND 00100100B ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND? JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION XOR A ; NO.0*+++0MAKESYS 81182, COPYRIGHT TELEVIDEO SYSTEMS, INC.1͝͏ͩ8( >ͩ8( >,ͩ8( >.͝*ͤA802>ͤ͝:!\$6#!] 6 #\!N##~+: ~A8905<## ~.( (# #.(!    C SETDMADMAADR F44B ED 43 F98D C SETDMA: LD (DMAADR),BC  F44F C9 C RET  C  C ; SECTRAN -- TRANSLATE SECTOR  C /M SECTOR  C ; INTO SELECTED DMA BUFFER POINTER  C READ F453 AF C READ: XOR A UNACNT F454 32 F985 C LD (UNACNT),A  F457 3E 01 C  THE SELECTED DMA BUUFER POINTER  C ; INTO SELECTED CP/M SECTOR  C WRITE F467 AF C WRITE: XOR A READOP F468 32 F98B C LD (READOP),A ; SET OPERATION T C BLKSIZ F473 3E 10 C LD A,BLKSIZ/128 ; NUMBER OF SECTORS/BLOCK UNACNT F475 32 F985 C LD (UNACNT),A ; UNALLOCATED SECTORS REMAINING SEKDSK F478 3A F97C C LD A,(SEKDSK) ; ACCEPTS: BC = LOGICAL SECTOR  C ; DE = TRANSLATIN TABLE ADDRESS  C ; RETURNS: HL = PHYSICAL SECTOR  C SECTRN F450 60 C SECTRN: L LD A,1 READOP F459 32 F98B C LD (READOP),A ; SET READ OPERATION RSFLAG F45C 32 F98A C LD (RSFLAG),A ; MUST READ DATA WRUAL F45F 3E 02 C LD A,WRUAL WRTYPE F461 32 F98C C LDO WRITE  F46B 79 C LD A,C ; SAVE WRITE TYPE WRTYPE F46C 32 F98C C LD (WRTYPE),A WRUAL F46F FE 02 C CP WRUAL ; WRITE UNALLOCATED? WRIT10 F471 20 17 C JR NZ,WRIT10 ; CH ; CP/M DRIVE. UNADSK F47B 32 F986 C LD (UNADSK),A ; TO UNALLOCATED DISK SEKTRK F47E 3A F97D C LD A,(SEKTRK) ; CP/M TRACK NO. UNATRK F481 32 F987 C LD (UNATRK),A SEKSEC F484 3A F97E D H,B  F451 69 C LD L,C  F452 C9 C RET  C  C ; READ CP/M SECTOR ENTRY POINT  C ; THIS ROUTINE READ THE SELECTED CP (WRTYPE),A ; TREAT AS UNALLOC RDWTCM F464 C3 F4CC C JP RDWTCM ; PERFORM THE READ  C  C ; WRITE ROUTINE ENTRY POINT  C ; THIS ROUTINE WRITEECK FOR UNALLOC  C  C ; WRITING TO AN UNALLOCATED BLOCK 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-15 802FDISK.MAC--DISK I/O MODULE  C LD A,(SEKSEC) ; CP/M SECTOR NO. UNASEC F487 32 F988 C LD (UNASEC),A  C  C ; CHECK FOR WRITE TO UNALLOCATED SECTOR  C WRIT10UNACNT    F48A 3A F985 C WRIT10: LD A,(UNACNT) ; ANY UNALLOCATED SECTOR REMAIN?  F48D B7 C OR A WRIT30 F48E 28 34 C JR Z,WRIT30 ; SKIP IF NOT  C   C ; DISKS ARE THE SAME  C SEKTRK F49D 3A F97D C LD A,(SEKTRK) ; CP/M TRACK NO. UNATRK F4A0 21 F987 C LD HL,UNATRK ; UNALLOCATED TRACK NO.  F4A3 BE P IF NOT  C  C ; MATCH, MOVE "UNASEC" TO NEXT SECTOR FOR FUTURE REF.  C  F4AF 34 C INC (HL) ; UNASEC = UNASEC+1  F4B0 7E TRK F4B7 3A F987 C LD A,(UNATRK)  F4BA 3C C INC A UNATRK F4BB 32 F987 C LD (UNATRK),A ; UNATRK = UNATRK+1  C  C ; MATCH FOUND, MARK C LD (UNACNT),A ; RESET UNALLOC. COUNTER = 0  F4C8 3C C INC A RSFLAG F4C9 32 F98A C LD (RSFLAG),A ; SET PRE-READ FLAG = YES.  C  C ; COMMON CO C ; ACTIVE HOST SECTOR?  C HSTACT F4D8 21 F983 C LD HL,HSTACT  F4DB 7E C LD A,(HL)  F4DC 36 01 C LD (HL),1 ; ALWAY BECOMES 1  F4DE  C ; MORE UNALLOCATED SECTORS IN THIS BLOCK  C  F490 3D C DEC A ; UNACNT = UNACNT-1 UNACNT F491 32 F985 C LD (UNACNT),A SEKDSK F494 3A F97C C LD A,(SEKDSK C CP (HL) ; SEEK.TRK = UNALL.TRK? WRIT30 F4A4 20 1E C JR NZ,WRIT30 ; SKIP IF NOT  C  C ; TRACKS ARE THE SAME  C SEKSEC C LD A,(HL) CPMSPT F4B1 FE 48 C CP CPMSPT ; CHECK END OF SECTOR IN CUR.TRACK? WRIT20 F4B3 38 09 C JR C,WRIT20 ; SKIP IF NO OVERFLOW  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS AS UNNECESSARY READ  C WRIT20 F4BE AF C WRIT20: XOR A RSFLAG F4BF 32 F98A C LD (RSFLAG),A ; SET PRE-READ FLAG = NO RDWTCM F4C2 18 08 C JR RDWTCM ; PERFORM WDE FOR READ AND WRITE ROUTINE  C RDWTCM F4CC AF C RDWTCM: XOR A ERFLAG F4CD 32 F989 C LD (ERFLAG),A ; RESET ERROR FLAG SEKSEC F4D0 3A F97E C LD A,(SEKSEC) ; CON B7 C OR A RDWT20 F4DF 28 25 C JR Z,RDWT20 ; FILL BUFFER IN ACTIVE FLAG = 0  C  C ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER?  C) ; GET SEEK DISK INTO A UNADSK F497 21 F986 C LD HL,UNADSK  F49A BE C CP (HL) ; SEEK.DSK = UNALL.DSK? WRIT30 F49B 20 27 C JR NZ,WRIT30 ; SKIP IF NOT  C   F4A6 3A F97E C LD A,(SEKSEC) ; GET SEEK SECTOR INTO A UNASEC F4A9 21 F988 C LD HL,UNASEC  F4AC BE C CP (HL) ; SEEK.SEC = UNALL.SEC? WRIT30 F4AD 20 15 C JR NZ,WRIT30 ; SKI-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-16 802FDISK.MAC--DISK I/O MODULE  C ; OVERFLOW TO NEXT TRACK  C  F4B5 36 00 C LD (HL),0 ; RESET SECTOR UNARITE CP/M SECTOR  C  C ; NOT AN UNALLOCATED SECTOR, REQUIRES PRE-READ  C WRIT30 F4C4 AF C WRIT30: XOR A UNACNT F4C5 32 F985 VERT SEEEK SECTOR TO HOST SECTOR  F4D3 B7 C OR A ; CLEAR CARRY FLAG  F4D4 1F C RRA SEKHST F4D5 32 F982 C LD (SEKHST),A ; TEMPORARY SECTOR NO.  C   SEKDSK F4E1 3A F97C C LD A,(SEKDSK) HSTDSK F4E4 21 F97F C LD HL,HSTDSK  F4E7 BE C CP (HL) ; SAME DISK? RDWT10 F4E8 20 12 C JR NZ,RDWT10 ; SKIP IF NOT MATCH      C  C ; SAME DISK, SAME TRACK?  C SEKTRK 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-17 802FDISK.MAC--DISK I/O MODU ݇!2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(! ! ~ 3#0 Wx x ހ ނ G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x =qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUBx: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#?͌͘ =_.:;<> Oޅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧ"C{2!"E9"1A22!ty)K!G_^#V*C~E ,&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~62E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*"**#"͕: 2Þy<_WyOxOxG* ~V5dw^ :ʈNÎ N#Fyʝ*}|\#u*#DM*6# x±**s#r͡*6#6^>:A#~$=2Ek͌\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ܯ2#~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3߯21y_͸2y2ͽ:ܷ˜1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^:ÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q O͐  :E B 2>: b# : y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*# ::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# # 2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{ C CP (HL) RDWT40 F4FA 28 2A C JR Z,RDWT40 ; SKIP IF MATCH  C  C ; PROPER DISK, BUT NOT CORRECT SECTOR  C RDWT10HSTWRT  RDWT20SEKDSK F506 3A F97C C RDWT20: LD A,(SEKDSK) HSTDSK F509 32 F97F C LD (HSTDSK),A SEKTRK F50C 3A F97D C LD A,(SEKTRK) HSTTRK F50F 32 F980 C LD (HSTTRK),A SEKHST F512  C RDWT30: XOR A ; INTO BUFFER. HSTWRT F523 32 F984 C LD (HSTWRT),A ; RESET PENDING WRITE FLAG  C  C ; COPY DATA TO OR FROM BUFFER   w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*F4FC 3A F984 C RDWT10: LD A,(HSTWRT) ; WRITE DATA PENDING IN BUFFER?  F4FF B7 C OR A RDWT20 F500 28 04 C JR Z,RDWT20 ; NO NEED TO FLUSH BUFFER WRITEH F502 CD F566 C CALL WRITE 3A F982 C LD A,(SEKHST) HSTSEC F515 32 F981 C LD (HSTSEC),A RSFLAG F518 3A F98A C LD A,(RSFLAG) ; CHECK BUFFER REQUIRES PRE-READ  F51B B7 C OR A RDWT30 F51C 28 04 C RDWT40SEKSEC F526 3A F97E C RDWT40: LD A,(SEKSEC) ; COMPUTE RELATIVE HOST BUFFER ADDRESS SECMSK F529 E6 01 C AND SECMSK  F52B 67 C LD H,A  F52C 2E 00 C LD L,0 2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E͊:==»y==»*Ww#*"͸*:G#š"͸:!w4!iw:Z!E~=26):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2 C  C ; SAME DISK, SAME TRACK, SAME BUFFER?  C SEKHST F4F3 3A F982 C LD A,(SEKHST) HSTSEC F4F6 21 F981 C LD HL,HSTSEC  F4F9 BE HST ; IF YES, THEN WRITE DATA TO DISK  F505 C0 C RET NZ ; ERROR IN WRITING TO DISK.  C  C ; MAY HAVE TO PRE-READ DATA TO HOST BUFFER  C  C JR Z,RDWT30 ; NO PRE-READ REQUIRED READHS F51E CD F55F C CALL READHST ; IF YES, THEN READ DATA FROM DISK  F521 C0 C RET NZ ; ERROR IN READING  C RDWT30 F522 AF  F52E CB 3C C SRL H  F530 CB 1D C RR L ; HL = ((SEKSEC)&SECMSK)*128  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-18 802FDISK.MAC-   -DISK I/O MODULE  C ; HL HAS RELATIVE HOST BUFFER ADDRESS  C HSTBUF F532 11 F991 C LD DE,HSTBUF  F535 19 C ADD HL,DE DMAADR F536 ED 5B F98D 1 HSTWRT F545 32 F984 C LD (HSTWRT),A ; SET WRITE PENDING FLAG ON  F548 EB C EX DE,HL ; SOURCE/DESTINATION POINTERS SWAP  C  C ; BC INITIALLY 128, DXIT ERFLAG F552 3A F989 C LD A,(ERFLAG) ; WITH ERROR FLAG =0, AND Z=1  F555 B7 C OR A  F556 C9 C RET  C  C ; ALWAYS FLUSH A D ; SECTOR, TRACK, DMA ADDRESS.  C READHS F55F C READHST: RDSCMD F55F 3E 80 C LD A,RDSCMD ; FDC READ COMMAND RDSTAB F561 21 F77F C LD HL,RDSTAB ; DMA I C RWHSECCOMAND F56B 32 F975 C RWHSEC: LD (COMAND),A DMATAB F56E 22 F97A C LD (DMATAB),HL  C HSTDSK F571 3A F97F C LD A,(HSTDSK) DRIVE F574 21 F876 C LD (RETRY),A ; ON DISK I/O OPERATION  C RWHS10DMATAB F583 2A F97A C RWHS10: LD HL,(DMATAB) ; GET DMA INITIALIZE PARAMETER POINTER PRTINI F586 CD F6EE C CALL PRTINI ; DO DMA IN C LD DE,(DMAADR) ; GET/PUT CP/M DATA BUFFER POINTER  F53A 01 0080 C LD BC,128 ; SET BC = LENGTH TO MOVE READOP F53D 3A F98B C LD A,(READOP) ; WHICH WAY?  F540 B7 C OR A RDWT50 F5E DESTINATION, HL IS SOURCE POINTER  C RDWT50 F549 ED B0 C RDWT50: LDIR  C  C ; DATA HAS BEEN MOVE TO/FROM HOST BUFFER  IRECTORY BUFFER  C RDWT60 F557 AF C RDWT60: XOR A HSTWRT F558 32 F984 C LD (HSTWRT),A ; RESET WRITE PENDING FLAG WRITEH F55B CD F566 C CALL WRITEHST  F55E NITIALIZATION TABLE RWHSEC F564 18 05 C JR RWHSEC ; CODE COMMON TO READ AND WRITE  C WRITEH F566 C WRITEHST: WTSCMD 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25,  C LD HL,DRIVE ; CURRENT DRIVE  F577 BE C CP (HL) ; SAME DRIVE? SELDRV F578 C4 F693 C CALL NZ,SELDRV ; NO, HARDWARE SELECT THE DRIVE SELSID F57B CD F662 C CALL SELSID ; SELECT THITIALIZATION. SEEK F589 CD F5BB C CALL SEEK ; SEEK THE USER DEFINED TRACK RWHS20 F58C 20 0F C JR NZ,RWHS20 ; ADJUST RETRY COUNTER COMAND F58E 3A F975 C LD A,(COMAND) ; SET UP FDC FDCCMD F5941 20 06 C JR NZ,RDWT50 ; SKIP IF READ OPERATION  C  C ; WRITE OPERATION, MARK AND SWITCH DIRECTION  C  F543 3E 01 C LD A, C WRTYPE F54B 3A F98C C LD A,(WRTYPE) ; CHECK WRITE TYPE OPERATION WRDIR F54E FE 01 C CP WRDIR ; DIRECTORY WRITE? RDWT60 F550 28 05 C JR Z,RDWT60 ; IF NOT A DIRECTORY WRITE THEN E C9 C RET  C  C ; HERE ARE THE SECTOR READ/WRITE FUNCTIONS. WE  C ; WANT TO READ/WRITE TO DISK USING THE PARAMETERS  C1981 MACRO-80 3.36 17-Mar-80 PAGE 1-19 802FDISK.MAC--DISK I/O MODULE  F566 3E A0 C LD A,WTSCMD ; FDC WRITE COMMAND WTSTAB F568 21 F790 C LD HL,WTSTAB ; DMA INITIALIZATION TABLE FOR WRITE  E PROPER SIDE  C  C ; READY TO READ OR WRITE A PHYSICAL SECTOR  C  F57E 3E 0A C LD A,10 ; NO. OF RETRIES RETRY F580 32 F977 1 D3 14 C OUT (FDCCMD),A ; COMMAND REGISTER WAIT F593 CD F5DB C CALL WAIT ; WAIT FOR CONTROLLER NOT BUSY RWHS20 F596 20 05 C JR NZ,RWHS20 ; ERROR ON READ/WRITE ERFLAG F598 3A F989 C     LD A,(ERFLAG) ; RETURN CODE  F59B B7 C OR A ; SET/CLEAR Z FLAG  F59C C9 C RET ; DISK I/O SUCCESSFUL  C  C ; WE HAD AN ERROR ON READ/WRI LD A,(HL)  F5AA 35 C DEC (HL) ; BUMP DOWN COUNT  F5AB B7 C OR A RWHS30 F5AC 28 05 C JR Z,RWHS30 ; ALL DONE, WE FAILED. RESTOR F5AE CD F6C5 C CALL RESTOR ; SEEK T C RET  C  C  C ; END OF 802FDISK.MAC   SUBTTL 802FSUBS.MAC--SUBROUTINES MODULE  A F97F C LD A,(HSTDSK) ; CURRENT DRIVE  F5C1 4F C LD C,A ; MAKE IT AN INDEX INTO  F5C2 06 00 C LD B,0 ; TRACK TABLE  F5C4 09 C ADD HL,BC ; ADD IN INDEX  F5C5 7E  C OUT (FDCDAT),A ; AND GIVE IT TO THE CONTROLLER. SEECMD F5D1 3E 14 C LD A,SEECMD ; THIS IS THE SEEK COMMAND FDCCMD F5D3 D3 14 C OUT (FDCCMD),A ; GIVE THE ORDER TO FDC  C  C ; READY CONDITION IS DETECTED. TIME-OUT  C ; FOR DRIVE BUSY OCCURS AT APPROX.  C ; 1.5 SECONDS AFTER COMMAND  C ; INITIATION.  TE OPERATION  C RWHS20RESDMA F59D CD F6D9 C RWHS20: CALL RESDMA ; RESET THE DMA ON ABORT ERFLAG F5A0 3A F989 C LD A,(ERFLAG) ; IF DRIVE NOT READY, FDCRDY F5A3 CB 7F C RACK 0. RWHS10 F5B1 18 D0 C JR RWHS10 ; LOOP BACK FOR ANOTHER SHOT.  C RWHS30ERRPRT F5B3 CD F71A C RWHS30: CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE ERFLAG F5B6 3A F989  PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-21 802FSUBS.MAC--SUBROUTINES MODULE   C INCLUDE 802FSUBS C LD A,(HL) ; PULL OUT THE TRACK FOR THIS DRIVE FDCTRK F5C6 D3 15 C OUT (FDCTRK),A ; SEND IT TO THE CONTROLLER  F5C8 47 C LD B,A ; SAVE FOR LATER HSTTRK F5C9 3A F980 C LD A,(  C ; NOW TEST FOR COMPLETION  C WAIT F5D5 CD F5DB C CALL WAIT ; WAIT UNTIL NOT BUSY SEEMSK F5D8 E6 98 C AND SEEMSK ; AND OUT TRACK 0 BIT  F5D C WAIT F5DB 3E 0F C WAIT: LD A,15 ; WE MUST DELAY ABOUT WAIT10 F5DD 3D C WAIT10: DEC A ; 60 USECS. BEFORE READING WAIT10 F5DE 20 FD C JR NZ,WAIT10 ; THE STATUS.   BIT FDCRDY,A ; DON'T BOTHER WITH RETRIES  F5A5 C0 C RET NZ ; RETURN ERROR FLAG IN A  C RETRY F5A6 21 F977 C LD HL,RETRY ; MORE RETRIES LEFT?  F5A9 7E C  C LD A,(ERFLAG) ; RETURN ERROR 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-20 802FDISK.MAC--DISK I/O MODULE  F5B9 B7 C OR A ; SET/CLEAR Z FLAG.  F5BA C9 .MAC  C  C ; THIS ROUTINE DOES THE ACTUAL SEEKING.  C SEEKTRKTAB F5BB 21 F98F C SEEK: LD HL,TRKTAB ; CURRENT TRACK TABLE HSTDSK F5BE 3HSTTRK) ; GET THE SOUGHT-AFTER TRACK.  F5CC 77 C LD (HL),A ; PLACE IT IN TRACK TABLE  F5CD B8 C CP B ; SAME TRACK?  F5CE C8 C RET Z ; YES, NO NEED TO SEEK FDCDAT F5CF D3 17 A C9 C RET ; MAY HAVE FAILED  C  C ; THIS ROUTINE LOOPS UNTIL THE FDC IS  C ; IN A NON-BUSY STATE, OR UNTIL A NOT-   C TEMPBC F5E0 ED 43 F86F C LD (TEMPBC),BC ; SAVE REGISTERS TEMPDE F5E4 ED 53 F871 C LD (TEMPDE),DE TEMPHL F5E8 22 F873 C LD (TEMPHL),HL  F5EB 01 C000 C LD BC,0C000H ; T    IME OUT FOR 1.25 SECONDS  F5EE 3E 00 C LD A,0 JMPSW F5F0 32 F875 C LD (JMPSW),A ; RESET THE FLAG FOR MESSAGE  C WAIT20FDCCMD 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25,-2.75 JMPSW F5FD 3A F875 C LD A,(JMPSW) ; GET MESSAGE FLAG--3.25  F600 FE 00 C CP 0 ; MESSAGE ALREADY SENT OUT?--1.75 WAIT30 F602 20 1F C JR NZ,WAIT30 ; YES, SKIP--1.75  F604 0B RROR CODE--3.00  C UNMSTA F60F 32 F979 C LD (UNMSTA),A ; UNMASKED STATUS (FOR DEBUG) ERRMSK F612 E6 DC C AND ERRMSK ; MASK OFF NON-ERROR BITS ERFLAG F614 32 F989 C 28 28 E0 C JR Z,WAIT40 ; NO, SKIP CONIN F62A CD F325 C CALL CONIN ; GET CHARACTER  F62D FE 03 C CP 03H ; CONTROL-C? WAIT40 F62F 20 D9 C JR NZ,WAIT40 ; NO, LOOP BACK   C CALL RESDMA ; RESET DMA  F646 3E 00 C LD A,0 DEFDSK F648 32 0004 C LD (DEFDSK),A ; SET DEFAULT DRIVE TO A WBOOT F64B C3 F280 C JP WBOOT ; WARM-BOOT 802FBIOS.MAC--TELEVIDEO SYSTEM ENT DRIVE  F656 C6 41 C ADD A,41H ; MAKE IT ASCII VDRIVE F658 32 F855 C LD (VDRIVE),A ; SAVE FOR LATER RDYMSG F65B 21 F83A C LD HL,RDYMSG ; PRINT DOOR MESSAGE PRTMSG F65E CD F6E4 C 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-22 802FSUBS.MAC--SUBROUTINES MODULE  F5F3 DB 14 C WAIT20: IN A,(FDCCMD) ; READ THE FDC STATUS--2.75 ERFLAG F5F5 32 F989 C LD (ERFLAG),A ; SAVE IT FOR LATER--3.25 FDCRDY F5 C DEC BC ; COUNT DOWN--1.50  F605 78 C LD A,B ; --2.25  F606 B1 C OR C ; TIME OUT?--1.00 SIGMSG F607 CC F64E C CALL Z,SIGMSG ; YES, PRINT MESSAGE--2.50 WAIT40 F60A F1  LD (ERFLAG),A ; SAVE STATUS FOR LATER  C WAIT50TEMPHL F617 2A F873 C WAIT50: LD HL,(TEMPHL) ; RESTORE REGISTERS TEMPDE F61A ED 5B F871 C LD DE,(TEMPDE) TEMPBC F61E ED 4B F86F  C  F631 F1 C POP AF ; RESTORE REGISTERS TEMPHL F632 2A F873 C LD HL,(TEMPHL) TEMPDE F635 ED 5B F871 C LD DE,(TEMPDE) TEMPBC F639 ED 4B F86F C LD BC,(TEMTS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-23 802FSUBS.MAC--SUBROUTINES MODULE  C  C ; THIS ROUTINE PRINTS DOOR MESSAGE WHEN THERE IS AN ACCESS TO   CALL PRTMSG  F661 C9 C RET  C  C ; SELECT THE PROPER SIDE OF THE  C ; DISKETTE TO SEEK, DEPENDING ON  C F8 CB 7F C BIT FDCRDY,A ; IS THE DEVICE NOT READY?--2.00 WAIT50 F5FA 20 1B C JR NZ,WAIT50 ; YES, THIS IS AN ERROR--1.25  C  F5FC F5 C PUSH AF ; SAVE REGISTERS- C WAIT40: POP AF ; RESTORE REGISTERS--2.50  C FDCBSY F60B CB 47 C BIT FDCBSY,A ; ARE WE PROCESSING A COMMAND?--2.00 WAIT20 F60D 20 E4 C JR NZ,WAIT20 ; NO, RETURN E C LD BC,(TEMPBC)  F622 C9 C RET  C WAIT30CONST F623 CD F2FF C WAIT30: CALL CONST ; CONSOLE STATUS  F626 FE 00 C CP 0 ; AVAILABLE INPUT? WAIT40 F6PBC)  C FRCCMD F63D 3E D0 C LD A,FRCCMD ; FORCE TERMINATE FDCCMD F63F D3 14 C OUT (FDCCMD),A FDCCMD F641 D3 14 C OUT (FDCCMD),A RESDMA F643 CD F6D9  C ; A DRIVE WITH DOOR OPENED  C SIGMSG F64E 3E 01 C SIGMSG: LD A,1 ; SET FLAG JMPSW F650 32 F875 C LD (JMPSW),A HSTDSK F653 3A F97F C LD A,(HSTDSK) ; CURR ; THE LOGICAL SECTOR NO. IN HSTSEC.  C ; GO AHEAD AND SET THE FDC SECTOR  C ; REGISTER.  C SELSIDFDDBYT F662 3A F976 C SELSID: LD A,(FDDBY    T) ; GET THE DRIVE SELECT LATCH IN MEMORY  F665 4F C LD C,A ; HOLD IT IN C FOR A BIT.  F666 CB 91 C RES 2,C ; CHOOSE SIDE 0, FOR NOW. HSTSEC F668 3A F981 C LD A,(HSTSEC) ; GET THE LOGICAL HNTROLLER TSEC F676 32 F877 C LD (TSEC),A ; SAVE FOR LATER  F679 79 C LD A,C ; GET NEW SIDE. FDDBYT F67A 32 F976 C LD (FDDBYT),A ; RESTORE IT TO THE MEMORY IMAGE FDD F67D D3 18  C LD A,B  F68F B1 C OR C ; REACHED ZERO YET? SELS20 F690 20 FB C JR NZ,SELS20 ; NO, LOOP BACK  F692 C9 C RET ; ALL DONE.  C 802FBIOS.MAC- C SELD10 F696 B7 C SELD10: OR A ; HAVE WE GOT THE RIGHT MASK? SELD20 F697 28 05 C JR Z,SELD20 ; YES.  F699 CB 21 C SLA C ; SHIFT DRIVE MASK OVER 1 BIT LEFT.FDD F6A7 D3 18 C OUT (FDD),A ; AND INFORM LATCH ABOUT NEW DRIVE.  F6A9 C9 C RET  C  C ; RESET THE DISK SUBSYSTEM BY RESTORING  ARE LATCH. MAXDRV F6B1 06 01 C LD B,MAXDRV ; INITIAL DRIVE NO.  C RESD10 F6B3 78 C RESD10: LD A,B ; SELECT THE DRIVE HSTDSK F6B4 32 F97F C LD (HSTDSK),A ; STOST SECTOR PSPT0 F66B FE 12 C CP PSPT0 ; SECTOR >= THAN MAXIMUM SECTOR? SELS10 F66D 38 04 C JR C,SELS10 ; IF NOT THEN SELECT SIDE 0  F66F CB D1 C SET 2,C ; CHOOSE SIDE 1. PSPT0 F671  C OUT (FDD),A ; AND LATCH MOTFLG F67F 3A F878 C LD A,(MOTFLG) ; MOTOR ON-OFF FLAG  F682 FE 00 C CP 0 ; MOTOR OFF?  F684 C0 C RET NZ ; NO, SKIP DELAY  F685 3E 01 C -TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-24 802FSUBS.MAC--SUBROUTINES MODULE  C ; SELECT THE DRIVE IN HARDWARE.  C ; DRIVE TO BE SELECTED IS PASSED    F69B 3D C DEC A ; DOWN THE COUNTER. SELD10 F69C 18 F8 C JR SELD10 ; AND LOOP.  C SELD20FDDBYT F69E 3A F976 C SELD20: LD A,(FDDBYT) ; GET MEMORY IMAGE OF D C ; ALL THE HEADS TO TRACK 0. RESTORING  C ; DRIVES IN REVERSE ORDER ASSURES THAT  C ; DRIVE A WILL ALWAYS BE SELECTED UPON  C ; COMPLETION.  ORE IT IN HSTDSK DRIVE F6B7 21 F876 C LD HL,DRIVE SELDRV F6BA CD F693 C CALL SELDRV RESTOR F6BD CD F6C5 C CALL RESTOR ; RESTORE THE HEADS TO TRACK 0  F6C0 05 C DEC B ; DE D6 12 C SUB PSPT0 ; DE-BIAS SECTOR NO.  C SELS10 F673 3C C SELS10: INC A ; PHYSICAL SECTORS HAVE ORIGIN 1 FDCSEC F674 D3 16 C OUT (FDCSEC),A ; SEND SECTOR TO CO LD A,1 MOTFLG F687 32 F878 C LD (MOTFLG),A ; SET MOTOR ON FLAG  F68A 01 9C40 C LD BC,40000 ; NEEDS DELAY FOR ABOUT 300MSEC SELS20 F68D 0B C SELS20: DEC BC ; COUNT DOWN  F68E 78  C ; IN REGISTER A.  C SELDRV F693 77 C SELDRV: LD (HL),A ; SAVE CURRENT DRIVE FOR LATER  F694 0E 10 C LD C,00010000B ; THIS IS THE MASK FOR DRIVE 0 RIVE LATCH  F6A1 E6 0F C AND 00001111B ; AND OFF CURRENT DRIVE SELECT BITS.  F6A3 B1 C OR C ; OUT WITH THE OLD, IN WITH THE NEW FDDBYT F6A4 32 F976 C LD (FDDBYT),A ; RESTORE MEMORY IMAGE.  C RESDSK F6AA 3E 02 C RESDSK: LD A,00000010B ; INITIALIZE THE FDD LATCH, MOTOR ON FDDBYT F6AC 32 F976 C LD (FDDBYT),A ; MEMORY IMAGE. FDD F6AF D3 18 C OUT (FDD),A ; HARDWCREMENT DRIVE NO. RESD10 F6C1 F2 F6B3 C JP P,RESD10 ; LOOP FOR NEXT DRIVE  F6C4 C9 C RET  C  C ; RESTORE THE HEADS ON THE CURRENTLY       C ; SELECTED DRIVE TO TRACK 0. THIS IS  C ; DONE AFTER EACH SEEK, READ, OR, WRITE  C ; FAILURE. ALSO AT WARM AND COLD BOOT.  C ; WE MUST RESET THE ; MAKE DRIVE NO. AN INDEX.  F6CE 19 C ADD HL,DE ; ADD IN INDEX.  F6CF 36 00 C LD (HL),0 ; CLEAR CURRENT TRACK TO 0. RESCMD F6D1 3E 00 C LD A,RESCMD ; FDC RESTORE COMMAND FDCCMD F6D3 A DMA F6DE D3 10 C OUT (DMA),A ; SO THAT IT DOESN'T RUN ON. RDMA10 F6E0 10 FA C DJNZ RDMA10 ; LOOP FOR ANOTHER TIME  F6E2 C1 C POP BC ; RESTORE REGISTER PAIR  F6E3 C9  F6E7 4F C LD C,A CRTOUT F6E8 CD F366 C CALL CRTOUT ; OUTPUT IT  F6EB 23 C INC HL PRTMSG F6EC 18 F6 C JR PRTMSG ; AND LOOP BACK  C  PRTENT: LD B,(HL) ; GET THE COUNT 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-26 802FSUBS.MAC--SUBROUTINES MODULE  F6F1 23 C INC HL ; POINT TO FIRST DATA BYTE  F6F2 ED B3PRTINI F6FB CD F6EE C CALL PRTINI ; BAUD RATE IS SET UP IN PROM CODE  C ; BY READING THE DIP SWITCH  F6FE C9 C RET ; MAY BE MORE LATER  C  CURRENT TRACK FOR  C ; THIS DRIVE ALSO. 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-25 802FSUBS.MAC--SUBROUTINES MODULE  C RESTORHSTDSK D3 14 C OUT (FDCCMD),A ; SEND IT. WAIT F6D5 CD F5DB C CALL WAIT ; WAIT FOR COMPLETION  F6D8 C9 C RET  C  C ; RESET THE DMA SIX TIMEC RET ; ALL DONE  C  C ; MISCELANEOUS ROUTINES  C  C ; PRINT THE STRING POINTED TO BY HL  C  C ; GENERAL PORT INITIALIZATION ROUTINE  C ; ENTRY: HL -> PORT ADDRESS  C ; BYTE COUNT  C ; DATA  C  C OTIR ; BLOCK OUTPUT  F6F4 C9 C RET  C  C ; ADDITIONAL HARWARE SYSTEM  C ; HARDWARE INITIALIZATION   C ; THIS ROUTINE TRANSFERS CONTROL TO  C ; THE I/O DRIVER INDICATED BY THE  C ; APPROPRIATE BITS IN IOBYTE (0003H).  C ; ENTRY: HL ->  F6C5 3A F97F C RESTOR: LD A,(HSTDSK) ; GET THE CURRENT DRIVE TRKTAB F6C8 21 F98F C LD HL,TRKTAB ; BASE ADDRESS OF CURRENT TRACK TABLE  F6CB 5F C LD E,A  F6CC 16 00 C LD D,0 S TOTAL  C RESDMA F6D9 C5 C RESDMA: PUSH BC ; DON'T DESTROY REGGIES  F6DA 06 06 C LD B,6 ; COUNTER RDMA10 F6DC 3E C3 C RDMA10: LD A,11000011B ; RESET THE DM ; AND TERMINATED BY NULL (0).  C PRTMSG F6E4 7E C PRTMSG: LD A,(HL)  F6E5 B7 C OR A  F6E6 C8 C RET Z ; ALL DONE  C   ; |  C ; |  C PRTINI F6EE 4E C PRTINI: LD C,(HL) ; GET PORT ADDRESS  F6EF 23 C INC HL PRTENT F6F0 46 C  C ; COMES NEXT.  C HDWINIRESDSK F6F5 CD F6AA C HDWINI: CALL RESDSK ; RESET THE DISK SUBSYSTEM SIOTAB F6F8 21 F7A1 C LD HL,SIOTAB ; INITIALIZE SIO #1 FOR SERIAL PRINTER   C ;  C ;  C ;  C ;       C IODISP F6FF E1 C IODISP: POP HL ; GET DISPATCH TABLE POINTER  F700 C5 C PUSH BC ; SAVE PERTINENT REGISTERS  F701 D5 C PUSH DE  F702 7E C  10 FD C DJNZ IODI10 ; ARE LINED UP WITH BIT 0  C IODI20 F70E E6 03 C IODI20: AND 03H ; MASK OFF DON'T CARE BITS  F710 17 C RLA ; FORM WORD OFFSET  F711 4 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-27 802FSUBS.MAC--SUBROUTINES MODULE  F719 E9 C JP (HL) ; OFF WE GO, INTO THE WILD BLUE YONDER!  C  C ; THIS R ; READ MESSAGE ERR10 F724 18 03 C JR ERR10 WRMSGWMSG F726 21 F835 C WRMSG: LD HL,WMSG ; WRITE MESSAGE ERR10VCMD F729 11 F7F5 C ERR10: LD DE,VCMD ; COMMAND MESSAGE ADDRESS IN TABLE  F72C ; ASCII 1 CONT10VTRK F741 21 F812 C CONT10: LD HL,VTRK ; TRACK VARIABLE HSTTRK F744 3A F980 C LD A,(HSTTRK) ; CURRENT TRACK NUMBER FTAB F747 CD F763 C CALL FTAB ; FILL OUT TABLE ROUTINE VSEC RTMSG  F762 C9 C RET  C  C ; THIS ROUTINE CONVERTS HEX CODE INTO ASCII AND FILL OUT THE TABLE  C FTAB F763 F5 C FLD A,(HL) ; DEVICE TYPE  F703 23 C INC HL ; ADVANCE POINTER  F704 47 C LD B,A ; SAVE DEVICE TYPE FOR LATER  F705 B7 C OR A ; WHICH DEVICE? IOBYTE F706 3A 0003 C F C LD C,A ; FORM 16 BITS, B ALREADY 0  F712 09 C ADD HL,BC ; ADD IN BASE ADDRESS  F713 5E C LD E,(HL) ; TRANSFER DISPATCH ADDRESS  F714 23 C INC HL ; TO REGISTEROUTINE FILLS OUT THE DETAILED ERROR MESSAGE TABLE  C ; OBTAINING VARIABLE VALUES FROM CURRENT STATE.  C ; THEN CALLS PRTMSG ROUTINE WITH THE TABLE ADDRESS IN HL  C  01 0005 C LD BC,5  F72F ED B0 C LDIR ; STORE IN TABLE VSIDE F731 21 F808 C LD HL,VSIDE ; SIDE VARIABLE FDDBYT F734 3A F976 C LD A,(FDDBYT) ; MEMORY IMAGE  F737 CB 57  F74A 21 F81E C LD HL,VSEC ; SECTOR VARIABLE TSEC F74D 3A F877 C LD A,(TSEC) ; CURRENT TARGET SECTOR FTAB F750 CD F763 C CALL FTAB VSTAT F753 21 F82D C LD HL,VSTAT ; ERROR STATUS TAB: PUSH AF ; SAVE REGISTERS  F764 0F C RRCA ; ROTATE RIGHT 4 TIMES  F765 0F C RRCA  F766 0F C RRCA  F767 0F C RRCA GHEX F768 CD F773 C  LD A,(IOBYTE) ; RETREIVE CURRENT IOBYTE IODI20 F709 28 03 C JR Z,IODI20 ; NO SHIFTING NEEDED  C IODI10 F70B 1F C IODI10: RRA ; ROTATE BYTE UNTIL DEVICE BITS IODI10 F70C S DE  F715 56 C LD D,(HL)  F716 EB C EX DE,HL ; RESULT INTO HL  F717 D1 C POP DE ; RESTORE REGISTERS  F718 C1 C POP BC 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 ERRPRTCOMAND F71A 3A F975 C ERRPRT: LD A,(COMAND) ; CURRENT COMMAND  F71D FE 80 C CP 80H ; READ? WRMSG F71F 20 05 C JR NZ,WRMSG ; NO, SKIP RMSG F721 21 F830 C LD HL,RMSG  C BIT 2,A ; SIDE BIT ONE F739 28 04 C JR Z,ONE ; 0 - SIDE 1  F73B 36 32 C LD (HL),32H ; ASCII 2 CONT10 F73D 18 02 C JR CONT10 ONE F73F 36 31 C ONE: LD (HL),31H  ERFLAG F756 3A F989 C LD A,(ERFLAG) ; GET ERROR FLAG FTAB F759 CD F763 C CALL FTAB ERRMSG F75C 21 F7F3 C LD HL,ERRMSG ; ERROR MESSAGE TABLE ADDRESS PRTMSG F75F CD F6E4 C CALL PCALL GHEX ; CONVERT HIGH ORDER 4 BITS TO ASCII  F76B 77 C LD (HL),A ; STORE INTO TABLE  F76C 23 C INC HL ; NEXT TABLE LOCATION  F76D F1 C POP AF ; RESTORE REGISTERS GHEX 802FBIOS    .MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-28 802FSUBS.MAC--SUBROUTINES MODULE  F76E CD F773 C CALL GHEX  F771 77 C LD (HL),A  F772 C9 C RET C RET  C  C ; END OF 802FSUBS.MAC  C   SUBTTL 802FEQU.MAC--EQUATES MODULE   ;WRITE TO DIRECTORY WRUAL 0002 C WRUAL EQU 2 ;WRITE TO UNALLOCATED  C  C ; SIO #0 PORT DEFINITIONS  C ; CHANNEL B FOR CRT  PRINTER  C SIOAD1 0020 C SIOAD1 EQU 20H ; CHANNEL A DATA PORT FOR SIO 1 SIOAC1 0022 C SIOAC1 EQU 22H ; CHANNEL A CONTROL PORT SIOBD1 0021 C STC3 000B C CTC3 EQU 0BH ; FLOPPY DISK INTERRUPT CHANNEL  C  C ; PIO PORT DEFINITIONS  C PIOAD 001C C PIOAD E0002 C TRXRDY EQU 2 ; TRANSMITTER BUFFER EMPTY  C  C ; PIO CENTRONICS PRINTER INTERFACE DEFINITIONS 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO  C  C ; HEX INTO ASCII ROUTINE  C GHEX F773 E6 0F C GHEX: AND 0FH ; STRIP HIGH 4 BITS  F775 FE 0A C CP 10 ; NUMERIC? PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-29 802FEQU.MAC--EQUATES MODULE   C INCLUDE 802FEQU.MAC   C SIOAD0 000C C SIOAD0 EQU 0CH ; CHANNEL A DATA PORT FOR SIO 0 SIOAC0 000E C SIOAC0 EQU 0EH ; CHANNEL A CONTROL PORT SIOBD0 000D C SIOBD0 EQU 0DH ; CIOBD1 EQU 21H ; CHANNEL B DATA PORT FOR SIO 1 SIOBC1 0023 C SIOBC1 EQU 23H ; CHANNEL B CONTROL PORT  C  C ; CTC PORT DEFINITIONS  C QU 1CH ; PIO CHANNEL A DATA PORT PIOAC 001E C PIOAC EQU 1EH ; PIO CHANNEL A CONTROL PORT PIOBD 001D C PIOBD EQU 1DH ; PIO CHANNEL B DATA PORT PIOBC 001F C PIOBC EQU 1FH ; -80 3.36 17-Mar-80 PAGE 1-30 802FEQU.MAC--EQUATES MODULE  C STROBE 0000 C STROBE EQU 0 ; PRINTER STROBE LINE PIOMSK 0038 C PIOMSK EQU 00111000B ; MASK FOR READY, PAPE G10 F777 30 03 C JR NC,G10 ; YES, SKIP FOR ALPHA  F779 C6 30 C ADD A,'0' ; ADD 30  F77B C9 C RET G10 F77C C6 37 C G10: ADD A,'A'-10 ; ADD 40  F77E C9  C  C ; BDOS CONSTANTS ON ENTRY TO WRITE  C WRALL 0000 C WRALL EQU 0 ;WRITE TO ALLOCATED WRDIR 0001 C WRDIR EQU 1HANNEL B DATA PORT FOR SIO 0 SIOBC0 000F C SIOBC0 EQU 0FH ; CHANNEL B CONTROL PORT  C  C ; SIO #1 PORT DEFINITIONS  C ; CHANNEL B FOR  CTC0 0008 C CTC0 EQU 08H ; TERMINAL BAUD RATE GENERATOR CTC1 0009 C CTC1 EQU 09H ; SERIAL PRINTER BAUD RATE GENERATOR CTC2 000A C CTC2 EQU 0AH ; REAL TIME CLOCK CHANNEL CPIO CHANNEL B CONTROL PORT  C  C ; SIO STATUS BIT DEFINITIONS  C RCVRDY 0000 C RCVRDY EQU 0 ; RECEIVE CHARACTER AVAILABLE TRXRDY R OUT, FAULT PIOERR 0008 C PIOERR EQU 00001000B ; ERROR STATE MASK PRTBSY 0005 C PRTBSY EQU 05H ; PRINTER BUSY IS BIT #5 IN STATUS BYTE  C  C      ; FDC EQUATES  C FDCCMD 0014 C FDCCMD EQU 14H ; FDC STATUS AND COMMAND PORT FDCTRK 0015 C FDCTRK EQU 15H ; FDC TRACK PORT FDCSEC 0016 C FM DISABLE ADDRESS DEFDSK 0004 C DEFDSK EQU 04H ; DEFAULT DRIVE NUMBER  C  C ; DMA PORT ADDRESS  C DMA 0010 C  FDCSEE EQU 4 ; FDC SEEK ERROR ENCOUNTERED FDCHLD 0005 C FDCHLD EQU 5 ; FDC HEAD LOAD ACK. FDCPRT 0006 C FDCPRT EQU 6 ; FDC DISK IS WRITE PROTECTED FDCRDY 0007 C FDCRDY E  C RESCMD 0000 C RESCMD EQU 00000000B ; HOME HEAD COMMAND, NO VERIFY SEECMD 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-31 802FEQU.MAC--EQUATES R RDACMD 00C0 C RDACMD EQU 11000000B ; READ SECTOR ADDRESS RDTCMD 00E0 C RDTCMD EQU 11100000B ; READ TRACK WTTCMD 00F0 C WTTCMD EQU 11110000B ; WRITE TRACK FRCCMD 00D0  C  C ; CP/M EQUATES  C CPMBUF 0080 C CPMBUF EQU 80H ; DEFAULT CP/M DMA ADDRESS IOBYTE 0003 C IOBYTE EQU 0003H LOGDDCSEC EQU 16H ; FDC SECTOR PORT FDCDAT 0017 C FDCDAT EQU 17H ; FDC DATA PORT  C  C ; FLOPPY DRIVE SELECT LATCH  C FDD 0018  DMA EQU 10H ; DMA PORT ADDRESS  C  C ; FDC STATUS BITS  C FDCBSY 0000 C FDCBSY EQU 0 ; FDC BUSY IS BIT 0 FDCIND 0001 QU 7 ; FDC DISK NOT READY BIT  C  C ; FDC STATUS BYTE MASKS  C ERRMSK 00DC C ERRMSK EQU 11011100B ; MASK OFF INSIGNIFICANT BITS SEEMODULE  0014 C SEECMD EQU 00010100B ; SEEK TRACK COMMAND HDSCMD 0034 C HDSCMD EQU 00110100B ; HEAD STEP, PREVIOUS DIRECTION HSICMD 0054 C HSICMD EQU 01010100B ; HEAD STEP IN, C FRCCMD EQU 11010000B ; FORCE TERMINATION  C  C ; ASCII EQUATES  C ASCETX 0003 C ASCETX EQU 03H ; ASCII END OF TRV 0004 C LOGDRV EQU 0004H ; CURRENTLY LOGGED DRIVE ADDRESS JP 00C3 C JP EQU 0C3H ; JUMP OPCODE. RECLEN 0080 C RECLEN EQU 128 ; NO. OF BYTES IN CP/M RECORD (SECTOR). BDOSLN C FDD EQU 18H ; DRIVE SELECT LATCH  C  C ; SYSTEM PROM SWITCH ADDRESS  C PROMSW 0004 C PROMSW EQU 04H ; SYSTEM PRO C FDCIND EQU 1 ; FDC INDEX HOLE DETECTED FDCTR0 0002 C FDCTR0 EQU 2 ; FDC TRACK 0 DETECTED FDCCRC 0003 C FDCCRC EQU 3 ; FDC CRC ERROR ENCOUNTERED FDCSEE 0004 C MSK 0098 C SEEMSK EQU 10011000B ; CHECK THE NOT READY BIT DNRMSK 0080 C DNRMSK EQU 10000000B ; DRIVE NOT READY MASK  C  C ; FDC COMMAND BYTES TOWARD HUB. HSOCMD 0074 C HSOCMD EQU 01110100B ; HEAD STEP OUT, TOWARD EDGE. RDSCMD 0080 C RDSCMD EQU 10000000B ; READ SECTOR WTSCMD 00A0 C WTSCMD EQU 10100000B ; WRITE SECTORANSMISSION ASCACK 0006 C ASCACK EQU 06H ; ASCII ACKNOWLEDGEMENT ASCLF 000A C ASCLF EQU 0AH ; ASCII LINE FEED ASCCR 000D C ASCCR EQU 0DH ; ASCII CARRIAGE RETURN   1600 C BDOSLN EQU 1600H ; LENGTH OF BDOS, IN BYTES. CCPLEN 0800 C CCPLEN EQU 800H ; LENGTH OF CCP, IN BYTES  C  C ; DISK PARAMETER BLOCKS.      C ; FIRST COME THE EQUATES  C ; FOR DISK PARAMETER BLOCKS  C BPDE 0020 C BPDE EQU 32 ; BYTES/DIRECTORY ENTRY  SPT0BPS0PSPT0NSIDE0 0048 C SPT0 EQU ((BPS0/128)*PSPT0)*NSIDE0 ;NUMBER OF CP/M SECTOR/TRACK SPD0SPT0TPD0 0B40 C SPD0 EQU SPT0*TPD0 ; NUMBER OF SECTORS/DISK EPD0 0040 C EPD0SM0 EQU ((SPD0-(SPT0*OFF0))/(BLM0+1))-1 ;CP/M BLOCK PER DISK DRM0EPD0 003F C DRM0 EQU EPD0-1 ; DIRECTORY ENTRIES - 1 ALL0 0080 C ALL0 EQU 10000000B ; DIRECTORY BLOCK BIT MAP LOW ALH0 0000 F BYTES/SECTOR NSIDE1 0002 C NSIDE1 EQU 2 ; NUMBER OF DISK SIDE PSPT1 0012 C PSPT1 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK SPT1BPS1PSPT1NSIDE1 0048 C SPT1 EQU ((BPS1/128SPD1SPT1OFF1BLM0 00AA C DSM1 EQU ((SPD1-(SPT1*OFF1))/(BLM0+1))-1 ; CP/M BLOCK PER DISK DRM1EPD1 003F C DRM1 EQU EPD1-1 ; DIRECTORY ENTRIES-1 ALL1 0080 C ALL1 EQU 10000000B CTOR SIZE HSTSPTPSPT0NSIDE0 0024 C HSTSPT EQU PSPT0*NSIDE0 ; SYSTEM DISK SECTOR PER TRACK HSTBLKHSTSIZ 0002 C HSTBLK EQU HSTSIZ/128 ; CP/M SECTORS/HOST BUFFER CPMSPTHSTBLKHSTSPT 0048  C  C ; DRIVE 0 EQUATES  C OFF0 0002 C OFF0 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD0 0028 C TPD0 EQU 40 ; NUMBER OF  EQU 64 ; NUMBER OF DIRECTORY ENTRIES BLS0 0800 C BLS0 EQU 2048 ; BLOCK SIZE BSH0 0004 C BSH0 EQU 4 ; BLOCK SHIFT FACTOR BLM0BLS0 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MAC C ALH0 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS0DRM0 0010 C CKS0 EQU (DRM0+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR  C  C ; DRIVE 1 EQUATES  )*PSPT1)*NSIDE1 ; NUMBER OF CP/M SECTORS/TRACK SPD1SPT1TPD1 0B40 C SPD1 EQU SPT1*TPD1 ; NUMBER OF SECTORS/DISK EPD1 0040 C EPD1 EQU 64 ; NUMBER OF DIRECTORY ENTRIES BLS1 0800 C ; DIRECTORY BLOCK BIT MAP LOW ALH1 0000 C ALH1 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS1DRM1 0010 C CKS1 EQU (DRM1+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR  C   C CPMSPT EQU HSTBLK*HSTSPT ; CP/M SECTOR PER TRACK SECMSKHSTBLK 0001 C SECMSK EQU HSTBLK-1 ; SECTOR MASK MAXDRV 0001 C MAXDRV EQU 1 ; MAXIMUM DRIVE NO. NODRVSMAXDRV 0002 TRACKS/DISK BPS0 0100 C BPS0 EQU 256 ; NUMBER OF BYTES/SECTOR NSIDE0 0002 C NSIDE0 EQU 2 ; NUMBER OF SIDE/DISK PSPT0 0012 C PSPT0 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK RO-80 3.36 17-Mar-80 PAGE 1-32 802FEQU.MAC--EQUATES MODULE  000F C BLM0 EQU (BLS0/128)-1 ; BLOCK MASK EXM0 0000 C EXM0 EQU 0 ; EXTENT MASK DSM0SPD0SPT0OFF0BLM0 00AA C D C OFF1 0002 C OFF1 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD1 0028 C TPD1 EQU 40 ; NUMBER OF TRACKS/DISK BPS1 0100 C BPS1 EQU 256 ; NUMBER O BLS1 EQU 2048 ; BLOCK SIZE BSH1 0004 C BSH1 EQU 4 ; BLOCK SHIFT FACTOR BLM1BLS1 000F C BLM1 EQU (BLS1/128)-1 ; BLOCK MASK EXM1 0000 C EXM1 EQU 0 ; EXTENT MASK DSM1 C ; CP/M HOST DISK CONSTANTS  C BLKSIZBLS0 0800 C BLKSIZ EQU BLS0 ; CP/M ALLOCATION BLOCK SIZE HSTSIZBPS0 0100 C HSTSIZ EQU BPS0 ; SYSTEM DISK SE C NODRVS EQU MAXDRV+1 ; NO. OF DRIVES IN SYSTEM NOTRYS 000A C NOTRYS EQU 10 ; NO. OF RETRIES ON SEEK, READ, WRITE.  C  C ; END OF 802FEQU.MAC        SUBTTL 802FDATA.MAC--DATA DEFINITION MODULE  PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-33 802FDATA.MAC--DEFB 15 ; TABLE COUNT  F781 C3 C DEFB 11000011B ; RESET THE DMA  F782 6D C DEFB 01101101B ; PORT ADDRESS FOLLOWS FDCDAT F783 17 C DEFB FDCDAT ; FDC DATA PORT ADDRESS  F784 00F F78D 05 C DEFB 00000101B ; A -> B, TRANSFER MODE  F78E CF C DEFB 11001111B ; LOAD REGISTERS  F78F 87 C DEFB 10000111B ; ARM THE DMA  C WTSTABDMA F0010000B ; PORT B IS MEMORY, INCREMENTS  F799 CD C DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS HSTBUF F79A F991 C DEFW HSTBUF ; ADDRESS OF DISK BUFFER  F79C 8A C DEFB 10001010B ; RETOCOL.  C SIOTABSIOBC1 F7A1 23 C SIOTAB: DEFB SIOBC1 ; PORT ADDRESS 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-34 802FDATA.MAC--DATA DEFINITION M C DEFB 00000101B ; POINT TO WR5  F7AA EA C DEFB 11101010B ; DTR, 8 BITS TX, RTS, TX ENABLE  C  C ; CTC IS BAUD GENERATOR FOR  CATA DEFINITION MODULE   C INCLUDE 802FDATA.MAC  C  C ; DATA STORAGE  C  F C DEFW 0FFH ; DISK BUFFER - 1  F786 3C C DEFB 00111100B ; PORT A IS FIXED  F787 10 C DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS  F788 CD C DEFB 11001101B ; PORT B790 10 C WTSTAB: DEFB DMA ; PORT ADDRESS  F791 0F C DEFB 15 ; TABLE COUNT  F792 C3 C DEFB 11000011B ; RESET THE DMA  F793 6D C DEFB 01101101B ; PORT ADDRESS FOLLOADY ACTIVE HIGH, END OF BLOCK  F79D CF C DEFB 11001111B ; LOAD REGISTERS  F79E 01 C DEFB 00000001B ; B -> A, TRANSFER MODE  F79F CF C DEFB 11001111B ; LOAD REGISTERS  F7A0 87 ODULE  F7A2 08 C DEFB 8 ; TABLE SIZE  F7A3 18 C DEFB 00011000B ; CHANNEL RESET  F7A4 18 C DEFB 00011000B ; ANOTHER ONE  F7A5 14 C DEFB 00010100B ; EXTERNAL S ; SIO.  C CTCTABCTC1 F7AB 09 C CTCTAB: DEFB CTC1 ; PORT ADDRESS FOR CTC  F7AC 02 C DEFB 2 ; TABLE SIZE  F7AD 47 C DEFB 01000111B ; COUNTER MODE C ; DMA INITIALIZATION TABLES FOR READ  C ; AND WRITE OPERATIONS  C RDSTABDMA F77F 10 C RDSTAB: DEFB DMA ; PORT ADDRESS  F780 0F C D MEMORY ADDRESS FOLLOWS HSTBUF F789 F991 C DEFW HSTBUF ; ADDRESS OF DISK BUFFER  F78B 8A C DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK  F78C CF C DEFB 11001111B ; LOAD REGISTERS WS FDCDAT F794 17 C DEFB FDCDAT ; FDC DATA PORT ADDRESS  F795 00FF C DEFW 0FFH ; DISK BUFFER - 1  F797 3C C DEFB 00111100B ; PORT A IS FIXED  F798 10 C DEFB 0 C DEFB 10000111B ; ARM THE DMA  C  C ; SIO INITIALIZATION TABLE FOR  C ; SERIAL PRINTER, 9600 BAUD,  C ; ETX/ACK PROTATUS RESET, POINT TO WR4  F7A6 4C C DEFB 01001100B ; X16 CLOCK, 2 STOP BITS  F7A7 03 C DEFB 00000011B ; POINT TO WR3  F7A8 C1 C DEFB 11000001B ; 8 BITS RX, RX ENABLE  F7A9 05 , VALUE FOLLOWS  F7AE 04 C DEFB 4 ; COUNTDOWN FOR 9600 BAUD  C  C ; MESSAGES, MESSAGES  C SIGNON F7AF 0D C SIGNO    N: DEFB 0DH  F7B0 0A C DEFB 0AH  F7B1 54 45 4C 45 C DEFB 'TELEVIDEO SYSTEM TS-802 V2.0'  F7B5 56 49 44 45 C  F7B9 4F 20 53 59 C  F7BD 53 54 45 4D C  F7C1 20 54 53 2D N  C BOOMSG F7E3 0D C BOOMSG: DEFB 0DH  F7E4 0A C DEFB 0AH  F7E5 42 6F 6F 74 C DEFM 'Boot Error.' ; ERROR ON WARM BOOT  F7E9 20 45 72 72 C  F7E C DEFB 0AH VCMD F7F5 C VCMD: DEFS 5 ; COMMAND  F7FA 20 45 52 52 C DEFB ' ERROR: SIDE# '  F7FE 4F 52 3A 20 C  F802 53 49 44 45 C  F806 23 20 C VSIDE 4 C  F828 41 54 55 53 C  F82C 20 C VSTAT F82D C VSTAT: DEFS 2 ; ERROR STATUS  F82F 00 C DEFB 0 RMSG F830 52 45 41 44 C RMSG: DEFB 'READ '  9 C  F84C 6E 20 64 72 C  F850 69 76 65 20 C  F854 22 C VDRIVE F855 C VDRIVE: DEFS 1  F856 22 2C 20 61 C DEFM '", and close the door.'  F85A 6E 64GES FOR REGISTERS  C TEMPBC F86F 0000 C TEMPBC: DEFW 0 TEMPDE F871 0000 C TEMPDE: DEFW 0 TEMPHL F873 0000 C TEMPHL: DEFW 0  C  C  F7C5 38 30 32 20 C  F7C9 56 32 2E 30 C  F7CD 0D C DEFB 0DH  F7CE 0A C DEFB 0AH  F7CF 36 32 6B 20 C DEFM '62k CP/M vers 2.2'  F7D3 43 50 2F 4D D 6F 72 2E C  F7F0 0D C DEFB 0DH 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-35 802FDATA.MAC--DATA DEFINITION MODULE  F7F1 0A C DEFB 0AH F808 C VSIDE: DEFS 1 ; SIDE  F809 2C 20 54 52 C DEFB ', TRACK# '  F80D 41 43 4B 23 C  F811 20 C VTRK F812 C VTRK: DEFS 2 ; TRACK NUMBER  F814 2C F834 20 C WMSG F835 57 52 49 54 C WMSG: DEFB 'WRITE'  F839 45 C  C  C ; DOOR MESSAGE TABLE  C RDYM 20 63 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-36 802FDATA.MAC--DATA DEFINITION MODULE  F85E 6C 6F 73 65 C  F862 20 74 68 65 C  F866 20 64 6F 6F C  JMPSW F875 00 C JMPSW: DEFB 0 ; FLAG FOR DOOR MESSAGE PRINT DRIVE F876 C DRIVE: DEFS 1 ; STORAGE FOR SAVING CURRENT DRIVE NO TSEC F877 C TSEC: DEFS 1 ; TARGET SECTOR MOTFLGC  F7D7 20 76 65 72 C  F7DB 73 20 32 2E C  F7DF 32 C  F7E0 0D C DEFB 0DH  F7E1 0A C DEFB 0AH  F7E2 00 C DEFB 0 ; TERMINATIO F7F2 00 C DEFB 0  C  C ; DETAILED ERROR MESSAGE TABLE  C ERRMSG F7F3 0D C ERRMSG: DEFB 0DH  F7F4 0A  20 53 45 C DEFB ', SECTOR# '  F818 43 54 4F 52 C  F81C 23 20 C VSEC F81E C VSEC: DEFS 2 ; SECTOR NUMBER  F820 2C 20 46 44 C DEFB ', FDC STATUS '  F824 43 20 53 5SG F83A 0D C RDYMSG: DEFB 0DH  F83B 0A C DEFB 0AH  F83C 43 68 65 63 C DEFM 'Check the disk in drive "'  F840 6B 20 74 68 C  F844 65 20 64 69 C  F848 73 6B 20 6  F86A 72 2E C  F86C 0D C DEFB 0DH  F86D 0A C DEFB 0AH  F86E 00 C DEFB 0  C  C ; TEMPORARY STORA F878 01 C MOTFLG: DEFB 1 ; MOTOR ON-OFF FLAG  C  C ; HERE ARE THE VERSION 2 DISK PARAMETER TABLES  C DPBASE F879 C     DPBASE:  C  C ; DRIVE 0 DISK PARAMETER HEADER  C HEAD0 F879 0000 C HEAD0: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 0  F87BAD  C  C  C ; DRIVE 1 DISK PARAMETER HEADER  C HEAD1 F889 0000 C HEAD1: DEFW 0 ; ADDR. OF SECTOR TRANSLATEF DISK ALLOCATION SCRATCHPAD  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-37 802FDATA.MAC--DATA DEFINITION MODULE  C  SM0 ; DETERMINES TOTAL STORAGE CAPACITY DRM0 F8A0 003F C DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES ALL0 F8A2 80 C DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY ALH0 F8A3 00 C  UNALLOCATED STORAGE AREAS  C DIRBUF F8A9 C DIRBUF: DEFS 128 ; DIRECTORY BUFFER  C  C ; DRIVE 0 STORAGE AREA   C  C ; DISK I/O COMMAND PARAMETERS  C COMAND F975 C COMAND: DEFS 1 ; CURRENT COMMAND FDDBYT F976 C FDDBYT:  0000 C DEFW 0 ; BDOS SCRATCH WORDS  F87D 0000 C DEFW 0 ; THREE OF THEM  F87F 0000 C DEFW 0 DIRBUF F881 F8A9 C DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK DPRM TABLE FOR DISK 1  F88B 0000 C DEFW 0 ; BDOS SCRATCH WORDS  F88D 0000 C DEFW 0 ; THREE OF THEM  F88F 0000 C DEFW 0 DIRBUF F891 F8A9 C DEFW DIRBUF ; ADDR. OF DIRECTO C ; HERE ARE THE DISK PARAMETER BLOCKS  C DPRMB0 F899 C DPRMB0: DPRMB1 F899 C DPRMB1: SPT0 F899 0048 C DEFW SPT0 ; NO. OF SECTOR PDEFB ALH0 ; HIGH ORDER BYTE OF ABOVE CKS0 F8A4 0010 C DEFW CKS0 ; SIZE OF DIRECTORY CHECK VECTOR OFF0 F8A6 0002 C DEFW OFF0 ; NO. OF TRACKS RESERVED FOR SYSTEM  C   C ALOCV0DSM0 F929 C ALOCV0: DEFS (DSM0/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV0CKS0 F93F C CHKSV0: DEFS CKS0 ; CHECK VECTOR STORAGE  C  DEFS 1 ; DRIVE, SIDE, DENSITY, SELECT LATCH RETRY F977 C RETRY: DEFS 1 ; RETRY COUNT BOOTRY F978 C BOOTRY: DEFS 1 ; BOOT RETRY COUNT UNMSTA F979 C UNMSTA: DEFS 1 ; UNMASKEB0 F883 F899 C DEFW DPRMB0 ; ADDR. OF DISK PARAMETER BLOCK 0 CHKSV0 F885 F93F C DEFW CHKSV0 ; ADDR. OF CHECK SCRATCHPAD ALOCV0 F887 F929 C DEFW ALOCV0 ; ADDR. OF DISK ALLOCATION SCRATCHPRY BUFFER FOR DISK DPRMB1 F893 F899 C DEFW DPRMB1 ; ADDR. OF DISK PARAMETER BLOCK 1 CHKSV1 F895 F965 C DEFW CHKSV1 ; ADDR. OF CHECK SCRATCHPAD ALOCV1 F897 F94F C DEFW ALOCV1 ; ADDR. OER TRACK BSH0 F89B 04 C DEFB BSH0 ; BLOCK SHIFT FACTOR BLM0 F89C 0F C DEFB BLM0 ; BLOCK MASK EXM0 F89D 00 C DEFB EXM0 ; EXTENT MASK DSM0 F89E 00AA C DEFW D C ; MISCELLANEOUS INITIALIZED STORAGE  C UL1SIZ F8A8 80 C UL1SIZ: DEFB 80H ; SIZE OF SERIAL PRINTER BUFFER  C  C ; C ; DRIVE 1 STORAGE AREA  C ALOCV1DSM1 F94F C ALOCV1: DEFS (DSM1/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV1CKS1 F965 C CHKSV1: DEFS CKS1 ; CHECK VECTOR STORAGE D VERSION OF ABOVE DMATAB F97A C DMATAB: DEFS 2 ; DMA INITIALIZE PARAMETER POINTER  C  C ; UNITIALIZED RAM DATA AREAS  C SEKDSK F   97C C SEKDSK: DEFS 1 ; SEEK DISK NUMBER SEKTRK 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-38 802FDATA.MAC--DATA DEFINITION MODULE  F97D C SEKTRK: DEFS  C HSTACT: DEFS 1 ; HOST ACTIVE FLAG HSTWRT F984 C HSTWRT: DEFS 1 ; HOST BUFFER WRITE PENDING FLAG  C UNACNT F985 C UNACNT: DEFS 1 ; UNALLOATED SECTOR COUNTOPER. WRTYPE F98C C WRTYPE: DEFS 1 ; WRITE OPERATION TYPE DMAADR F98D C DMAADR: DEFS 2 ; LAST DMA ADDRESS TRKTABNODRVS F98F C TRKTAB: DEFS NODRVS ; CURRENT TRACK TABLE HNITION MODULE Macros: Symbols: ALH0 0000 ALH1 0000 ALL0 0080 ALL1 0080 ALOCV0 F929 ALOCV1 F94F ASCACK 0006 ASCCR 000D ASCETX 0003 ASCLF 000A BATIN F418 BATOUT F418 BATST F41B BDOS E406 BDOSLN 1600 BIOS F200 BLKSIZ 0800 BLM0 000F F899 DPRMB1 F899 DRIVE F876 DRM0 003F DRM1 003F DSM0 00AA DSM1 00AA EPD0 0040 EPD1 0040 ERFLAG F989 ERR10 F729 ERRMSG F7F3 ERRMSK 00DC ERRPRT F71A EXM0 0000 EXM1 0000 FDCBSY 0000 FDCCMD 0014 FDCCRC 0003 FDCDAT 0017 FDCHLD 0005 F F3F9 LPTLST F394 LPTS10 F402 MAXDRV 0001 MOTFLG F878 NODRVS 0002 NOTRYS 000A NSIDE0 0002 NSIDE1 0002 OFF0 0002 OFF1 0002 ONE F73F PIOAC 001E PIOAD 001C PIOBC 001F PIOBD 001D PIOERR 0008 PIOMSK 0038 PROMSW 0004 PRTBSY 0005 PRTENT F1 ; SEEK TRACK NUMBER SEKSEC F97E C SEKSEC: DEFS 1 ; SEEK SECTOR NUMBER  C HSTDSK F97F C HSTDSK: DEFS 1 ; HOST DISK NUMBER HSTTRK F980 C HST UNADSK F986 C UNADSK: DEFS 1 ; UNALLOCATED DISK UNATRK F987 C UNATRK: DEFS 1 ; UNALLOCATED TRACK UNASEC F988 C UNASEC: DEFS 1 ; UNALOCATED SECTOR  STBUFHSTSIZ F991 C HSTBUF: DEFS HSTSIZ ; HOST DISK I/O BUFFER AREA. UL1CNT FA91 C UL1CNT: DEFS 1 ; SERIAL PRINTER BUFFER COUNT  C  C ; END BLM1 000F BLS0 0800 BLS1 0800 BOOMSG F7E3 BOOT F264 BOOTRY F978 BPDE 0020 BPS0 0100 BPS1 0100 BSH0 0004 BSH1 0004 CCPLEN 0800 CHKSV0 F93F CHKSV1 F965 CKS0 0010 CKS1 0010 COMAND F975 CONIN F325 CONOUT F34F CONST F2FF CONT10 F741 DCIND 0001 FDCPRT 0006 FDCRDY 0007 FDCSEC 0016 FDCSEE 0004 FDCTR0 0002 FDCTRK 0015 FDD 0018 FDDBYT F976 FRCCMD 00D0 FTAB F763 G10 F77C GHEX F773 GOCPM F2D4 HDSCMD 0034 HDWINI F6F5 HEAD0 F879 HEAD1 F889 HOME F41D HOMED F426 HSICMD 06F0 PRTINI F6EE PRTMSG F6E4 PSPT0 0012 PSPT1 0012 PTPPUN F418 PTRRDR F418 PUNCH F37C RCVRDY 0000 RDACMD 00C0 RDMA10 F6DC RDSCMD 0080 RDSTAB F77F RDTCMD 00E0 RDWT10 F4FC RDWT20 F506 RDWT30 F522 RDWT40 F526 RDWT50 F549 RDWT60 F557 RDTRK: DEFS 1 ; HOST TRACK NUMBER HSTSEC F981 C HSTSEC: DEFS 1 ; HOST SECTOR NUMBER  C SEKHST F982 C SEKHST: DEFS 1 ; SEEK HOST SECTOR NUMBER HSTACT F983  C ERFLAG F989 C ERFLAG: DEFS 1 ; ERROR REPORTING RSFLAG F98A C RSFLAG: DEFS 1 ; PRE-READ SECTOR FLAG READOP F98B C READOP: DEFS 1 ; 0 IF WRITE OPERATION; 1 IF READ  OF 802FDATA.MAC   .DEPHASE  END 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE S 802FDATA.MAC--DATA DEFICPMBAS DC00 CPMBUF 0080 CPMSPT 0048 CRT10 F349 CRT20 F336 CRTIN F332 CRTOUT F366 CRTST F31C CTC0 0008 CTC1 0009 CTC2 000A CTC3 000B CTCTAB F7AB DEFDSK 0004 DIRBUF F8A9 DMA 0010 DMAADR F98D DMATAB F97A DNRMSK 0080 DPBASE F879 DPRMB0054 HSOCMD 0074 HSTACT F983 HSTBLK 0002 HSTBUF F991 HSTDSK F97F HSTSEC F981 HSTSIZ 0100 HSTSPT 0024 HSTTRK F980 HSTWRT F984 IOBYTE 0003 IODI10 F70B IODI20 F70E IODISP F6FF JMPSW F875 JP 00C3 LIST F388 LISTST F3ED LOGDRV 0004 LPTLSSWTCM F4CC RDYMSG F83A READ F453 READER F370 READHS F55F READOP F98B RECLEN 0080 RESCMD 0000 RESD10 F6B3 RESDMA F6D9 RESDSK F6AA RESTOR F6C5 RETRY F977 REV F263 RMSG F830 RSFLAG F98A RWHS10 F583 RWHS20 F59D RWHS30 F5B3 RWHSEC F56B S   ECMSK 0001 SECTRN F450 SEECMD 0014 SEEK F5BB 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE S-1 802FDATA.MAC--DATA DEFINITION MODULE SEEMSK 0098 SEKDSK F97C SEKHST F982 SEKSEC F97E SEKTRK F97D SELST F41B UL1CNT FA91 UL1L10 F3B4 UL1L20 F3C2 UL1L30 F3C6 UL1L40 F3D2 UL1L50 F3D8 UL1L60 F3E4 UL1L70 F3EA UL1LSS F404 UL1LST F3A9 UL1SIZ F8A8 UNACNT F985 UNADSK F986 UNASEC F988 UNATRK F987 UNMSTA F979 UNUSED F417 UP1PUN F418 UP2PUN FMODULE  0014 C SEECMD EQU 00010100B ; SEEK TRACK COMMAND HDSCMD 0034 C HDSCMD EQU 00110100B ; HEAD STEP, PREVIOUS DIRECTION HSICMD 0054 C HSICMD EQU 01010100B ; HEAD STEP IN, C FRCCMD EQU 11010000B ; FORCE TERMINATION  C  C ; ASCII EQUATES  C ASCETX 0003 C ASCETX EQU 03H ; ASCII END OF T 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1 1 2 ; CBIOS FOR TELEVIDEO TS-802 SYSTEM 3  ; - SIGN-ON MESSAGE CHANGE 14 15 ; 8-25-81 SUNG WOO LEE 16 ; - ENHANCEMENT FOR REV. B 17 D10 F696 SELD20 F69E SELDRV F693 SELDSK F42B SELS10 F673 SELS20 F68D SELSID F662 SETDMA F44B SETSEC F446 SETTRK F441 SIGMSG F64E SIGNON F7AF SIOAC0 000E SIOAC1 0022 SIOAD0 000C SIOAD1 0020 SIOBC0 000F SIOBC1 0023 SIOBD0 000D SIOBD1 418 UR1RDR F418 UR2RDR F418 VCMD F7F5 VDRIVE F855 VER F262 VSEC F81E VSIDE F808 VSTAT F82D VTRK F812 WAIT F5DB WAIT10 F5DD WAIT20 F5F3 WAIT30 F623 WAIT40 F60A WAIT50 F617 WBOO10 F28C WBOO20 F29C WBOO30 F2C2 WBOO40 F2CC WBOOT F280  TOWARD HUB. HSOCMD 0074 C HSOCMD EQU 01110100B ; HEAD STEP OUT, TOWARD EDGE. RDSCMD 0080 C RDSCMD EQU 10000000B ; READ SECTOR WTSCMD 00A0 C WTSCMD EQU 10100000B ; WRITE SECTORANSMISSION ASCACK 0006 C ASCACK EQU 06H ; ASCII ACKNOWLEDGEMENT ASCLF 000A C ASCLF EQU 0AH ; ASCII LINE FEED ASCCR 000D C ASCCR EQU 0DH ; ASCII CARRIAGE RETURN   4 ; COPYRIGHT (C) 1981 5 ; TELEVIDEO SYSTEMS INC. 6 ; 1170 MORSE AVENUE 7 ; SUNNYVALE, CA 94086 8  ; -- DRIVE DOOR OPEN MESSAGE 18 ; -- DETAILED ERROR MESSAGE 19 ; -- DISK DRIVE MOTOR & LIGHT OFF WHEN UNUSED 20 ; -- NO SEEK ON 0021 SIOTAB F7A1 SPD0 0B40 SPD1 0B40 SPT0 0048 SPT1 0048 STROBE 0000 TEMPBC F86F TEMPDE F871 TEMPHL F873 TPD0 0028 TPD1 0028 TRKTAB F98F TRXRDY 0002 TSEC F877 TTYIN F331 TTYOUT F35B TTYS1 F319 TTYST F30B UC1IN F418 UC1OUT F418 UC1WMSG F835 WRALL 0000 WRDIR 0001 WRIT10 F48A WRIT20 F4BE WRIT30 F4C4 WRITE F467 WRITEH F566 WRMSG F726 WRTYPE F98C WRUAL 0002 WTSCMD 00A0 WTSTAB F790 WTTCMD 00F0 No Fatal error(s) TA F979 UNUSED F417 UP1PUN F418 UP2PUN FR RDACMD 00C0 C RDACMD EQU 11000000B ; READ SECTOR ADDRESS RDTCMD 00E0 C RDTCMD EQU 11100000B ; READ TRACK WTTCMD 00F0 C WTTCMD EQU 11110000B ; WRITE TRACK FRCCMD 00D0  C  C ; CP/M EQUATES  C CPMBUF 0080 C CPMBUF EQU 80H ; DEFAULT CP/M DMA ADDRESS IOBYTE 0003 C IOBYTE EQU 0003H LOGD ; (408) 745-7760 9 10 ; VERSION V2.0 (RELEASE) 11 12 ; 7-24-81 SUNG WOO LEE 13THE SAME TRACK 21 ; -- NO SELECT DRIVE FOR THE SAME 22 ; -- PRINTER INTERFACE WITH EPSON SERIAL AS DEFAULT 23 ; -- SIO #1 ADDED TO SERVE FOR P   RINTER THROUGH CH. B 24 25 ; 12-10-81 SUNG WOO LEE 26 ; - REMOVED CTC CH #1 INITIALIZATION ROUTINE NOT TO CHANGE 27  the terms of that agreement. 34 35 36 TITLE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 37 .* 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-1 47 ;******************************** 48 49 DC00  802FBOOT.MAC 56 C 57 C ; **************** BIOS JUMP TABLE ***************** 58 C 59 F200 C3 F264 C BIOS: JP BOOT 60 F203  JP SETSEC 71 F224 C3 F44B C JP SETDMA 72 F227 C3 F453 C JP READ 73 F22A C3 F467 C JP WRITE 74 F22D C3 F3ED C JP LISTST 75 F230 C3 F450 C JP SE 86 F24A 2C 20 54 45 C 87 F24E 4C 45 56 49 C 88 F252 44 45 4F 20 C 89 F256 53 59 53 54 C 90 F25A 45 4D 53 20 C 91 F25E 49 4E 43 2E C 92  ; THE BAUD RATE SET UP BY PROM FOR PRINTER 28 29 ; TeleVideo Systems Incorporated Proprietary Information. 30 ; This listing is supplied und 38 39 .Z80 40 0000' CSEG 41 .PHASE 0F200H 42 43 CPMBAS EQU $-BDOSLN ; BASE OF CP/M (CCP) 50 E406 BDOS EQU CPMBAS+CCPLEN+6 ; ADDRESS OF BDOS ENTRY 51 52 SUBTTL 802FBOOT.MAC--BOOTSTRAP MODULE 53  C3 F280 C JP WBOOT 61 F206 C3 F2FF C JP CONST 62 F209 C3 F325 C JP CONIN 63 F20C C3 F34F C JP CONOUT 64 F20F C3 F388 C JP LIST 65 F212 C3 F37C CTRN 76 F233 C3 F417 C JP UNUSED 77 F236 C3 F417 C JP UNUSED 78 F239 C3 F417 C JP UNUSED 79 F23C C3 F417 C JP UNUSED 80 F23F C3 F417 C JP UNUSED  C 93 C ; VERSION AND REVISION NO. 94 C 95 F262 02 C VER: DEFB 2 96 F263 00 C REV: DEFB 0 97 er the terms of a license 31 ; agreement with TeleVideo Systems Incorporated and may 32 ; not be copied nor disclosed except in accordance with 33 ; ;******************************** 44 ; THE FOLLOWING EQUATES ARE KEPT* 45 ; ISOLATED FROM THE REST FOR * 46 ; PURPOSES OF MOVCPM GENERATION PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-2 802FBOOT.MAC--BOOTSTRAP MODULE 54 55 C INCLUDE C JP PUNCH 66 F215 C3 F370 C JP READER 67 F218 C3 F41D C JP HOME 68 F21B C3 F42B C JP SELDSK 69 F21E C3 F441 C JP SETTRK 70 F221 C3 F446 C  81 C 82 C ; COPYRIGHT STATEMENT 83 C 84 F242 28 43 29 20 C DEFM '(C) 1981, TELEVIDEO SYSTEMS INC.' 85 F246 31 39 38 31 C  C 98 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-3 802FBOOT.MAC--BOOTSTRAP MODULE 99 C ; COME HERE FROM COLDSTART    LOADER 100 C 101 F264 D3 04 C BOOT: OUT (PROMSW),A ; SHUT PROM OFF (DEBUG) 102 F266 31 0100 C LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER 103 F269 21 F7AF C IALIZE SYSTEM HARDWARE 112 F27E 18 54 C JR GOCPM ; DO MORE INITIALIZATION 113 C 114 C ; WE JUMP TO HERE WHENEVER THE USER WANTS 115 C ),A ; CONDITION ON WRITE ERROR 123 C 124 F28C CD F6AA C WBOO10: CALL RESDSK ; RESET DISK SUBSYSTEM 125 C 126 C ; INITIALIZE THE TRANSF C WBOO20: PUSH BC ; SAVE REGISTERS 135 F29D E5 C PUSH HL 136 F29E D5 C PUSH DE 137 F29F 4D C LD C,L ; MOVE TRANSFER ADDRESS TO BC 138 F2A0 44 1-4 802FBOOT.MAC--BOOTSTRAP MODULE 145 F2AF 28 11 C JR Z,WBOO30 ; READ SUCCESSFUL 146 F2B1 D1 C POP DE ; ELSE RETORE REGISTERS 147 F2B2 E1 C POP HL 148 F2B3 C1  AND SECTOR 157 F2C3 1C C INC E ; BUMP SECTOR NO. 158 F2C4 7B C LD A,E 159 F2C5 FE 48 C CP SPT0 ; END OF CURRENT TRACK? 160 F2C7 38 03 C JR C,WBOO40 ; NO. LD HL,SIGNON ; PRINT SIGNON MESSAGE 104 F26C CD F6E4 C CALL PRTMSG 105 C 106 F26F AF C XOR A ; MAKE LOGGED DRIVE 0 107 F270 32 F876 C LD (DRIVE),A ; SAVE ; TO RESTART THE SYSTEM, I. E., REREAD CP/M 116 C ; WITHOUT MODIFYING THE BIOS 117 C 118 F280 31 0100 C WBOOT: LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER 119 F28ER PARAMETERS 127 C 128 F28F 0E 00 C LD C,0 ; SELECT DRIVE ZERO 129 F291 CD F42B C CALL SELDSK ; FROM WHICH TO BOOT 130 F294 21 DC00 C LD HL,CPMBAS ; INITI C LD B,H 139 F2A1 CD F44B C CALL SETDMA ; SET DATA TRANSFER ADDRESS 140 F2A4 4A C LD C,D 141 F2A5 CD F441 C CALL SETTRK ; SET TRACK REGISTER TO D 142 F2A8 4B  C POP BC 149 F2B4 21 F978 C LD HL,BOOTRY ; CHECK ON RETRY SITUATION 150 F2B7 35 C DEC (HL) 151 F2B8 20 D2 C JR NZ,WBOO10 ; MORE TRIES LEFT. 152 F2BA 21 F7E3 C  161 F2C9 1E 00 C LD E,0 ; CYCLE THE SECTOR NO. 162 F2CB 14 C INC D ; AND INCREMENT THE TRACK 163 C 164 F2CC E1 C WBOO40: POP HL ; RECALL THE TRANS IT FOR LATER 108 F273 32 0004 C LD (LOGDRV),A 109 F276 3E 15 C LD A,00010101B ; INITIALIZE IOBYTE 110 F278 32 0003 C LD (IOBYTE),A 111 F27B CD F6F5 C CALL HDWINI ; INIT3 3E 0A C LD A,NOTRYS ; NUMBER OF RETRIES FOR BOOT 120 F285 32 F978 C LD (BOOTRY),A ; STORE IT. 121 F288 AF C XOR A ; PREVENT BUFFER FLUSH 122 F289 32 F983 C LD (HSTACTAL DMA ADDRESS 131 F297 11 0002 C LD DE,0002H ; D=INITIAL TRACK, E=INITIAL SECTOR 132 F29A 06 2C C LD B,BDOSLN/RECLEN ; LENGTH OF TRANSFER, IN SECTORS 133 C 134 F29C C5 C LD C,E 143 F2A9 CD F446 C CALL SETSEC ; SET SECTOR REGISTER TO E 144 F2AC CD F453 C CALL READ ; READ A SECTOR 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE  LD HL,BOOMSG ; PRINT ERROR MESSAGE 153 F2BD CD F6E4 C CALL PRTMSG 154 F2C0 18 FE C JR $ ; AND DIE. 155 C 156 F2C2 D1 C WBOO30: POP DE ; ADJUST TRACKFER ADDRESS 165 F2CD 01 0080 C LD BC,RECLEN ; ADD IN A SECTOR 166 F2D0 09 C ADD HL,BC 167 F2D1 C1 C POP BC ; RESTORE SECTOR COUNT 168 F2D2 10 C8 C DJNZ WBOO20     ; GO READ NEXT SECTOR. 169 C 170 C ; CODE SHARED BY BOTH WARM AND COLD STARTS 171 C 172 F2D4 01 0080 C GOCPM: LD BC,CPMBUF ; INITIALI; STORE IT 181 F2EE AF C XOR A ; CLEAR SERIAL PRINTER BUFFER COUNT 182 F2EF 32 FA91 C LD (UL1CNT),A ; ON COLD OR WARM START 183 F2F2 32 F985 C LD (UNACNT),A ; UNALLOCATED SECTOR COUNT S.MAC--CONSOLE I/O MODULE 191 SUBTTL 802FCONS.MAC--CONSOLE I/O MODULE 192 PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-6 802FC F2FF CD F6FF C CONST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 202 F302 00 C DEFB 0 ; CONSOLE POSITION IN IOBYTE 203 F303 F30B C DEFW TTYST ; CONSOLE PRINTER DEVICE 204 F305 F31 C TTYST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND 213 F30D D3 23 C OUT (SIOBC1),A ; SEND OUT 214 F30F DB 23 C IN A,(SIOBC1) ; READ SIO STATUS 215 F311 E6 24 C AND 00100100B ; C 225 C ; CONSOLE STATUS ROUTINE FOR STANDARD 226 C ; CRT TERMINAL DEVICE, SIO #0 CHANNEL B. 227 C 228 F31C DB 0F ZE DMA ADDRESS 173 F2D7 CD F44B C CALL SETDMA 174 F2DA 3E C3 C LD A,JP ; INITIALIZE LOW MEMORY 175 F2DC 32 0000 C LD (0000H),A 176 F2DF 21 F203 C LD HL,BIOS+3 ; WARM BOO184 F2F5 32 F983 C LD (HSTACT),A ; BUFFER INACTIVE 185 F2F8 3A 0004 C LD A,(LOGDRV) ; PASS LOGGED DRIVE NO. 186 F2FB 4F C LD C,A ; IN REG-C 187 F2FC C3 DC00 C JP CPMBAS ONS.MAC--CONSOLE I/O MODULE 193 194 C INCLUDE 802FCONS.MAC 195 C 196 C ; TEST THE STATUS OF THE CONSOLE INPUT TO 1C C DEFW CRTST ; CONSOLE CRT DEVICE 205 F307 F41B C DEFW BATST ; CONSOLE BATCH DEVICE 206 F309 F41B C DEFW UC1ST ; USER DEFINED CONSOLE 207 C 208  CHECK TRANSMITT READY AND CTS 216 F313 FE 24 C CP 00100100B ; READY TO SEND? 217 F315 28 02 C JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION 218 F317 AF C XOR A ; NO, SET NOT READY  C CRTST: IN A,(SIOBC0) ; READ SIO STATUS 229 F31E CB 47 C BIT RCVRDY,A ; CHARACTER AVAILABLE? 230 F320 3E 00 C LD A,0 231 F322 C8 C RET Z ; NO. A = 0 232 T JUMP ENTRY 177 F2E2 22 0001 C LD (0001H),HL ; STORE IT 178 F2E5 32 0005 C LD (0005H),A 179 F2E8 21 E406 C LD HL,BDOS ; BDOS ENTRY POINT 180 F2EB 22 0006 C LD (0006H),HL  ; TO CCP 188 C 189 C ; END OF 802FBOOT.MAC 190 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-5 802FCON97 C ; SEE IF A CHARACTER IS AVAILABLE. 198 C ; EXIT: A=0FFH -> CHARACTER AVAILABLE 199 C ; A=0 -> NO CHARACTER 200 C 201  C ; PRINTER STATUS ROUTINE FOR SERIAL 209 C ; INTERFACE WITH EPSON AND TI 210 C ; SIO #1 CHANNEL B 211 C 212 F30B 3E 10 CONDITION 219 F318 C9 C RET 220 C 221 F319 AF C TTYS1: XOR A 222 F31A 3D C DEC A ; A = FF 223 F31B C9 C RET 224  C 233 F323 3D C DEC A ; YES. A = FFH 234 F324 C9 C RET 235 C 236 C ; GRAB A CHARACTER FROM CONSOLE INPUT. 237     C ; EXIT: A=RETURNED CHARACTER 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-7 802FCONS.MAC--CONSOLE I/O MODULE 238 C 239 F325 CD F6FF  ; JUST RETURN FOR NOW 247 C 248 F331 C9 C TTYIN: RET 249 C 250 C ; CONSOLE INPUT ROUTINE FOR 251 C  0E C JR NZ,CRT10 ; SKIP 260 F33B 0B C DEC BC ; COUNT DOWN 261 F33C 78 C LD A,B ; BC REACHED ZERO? 262 F33D B1 C OR C 263 F33E 20 F6 C JROP BC 271 F34E C9 C RET 272 C 273 C ; OUTPUT A CHARACTER TO THE CONSOLE. 274 C ; ENTRY: C=CHARACTER TO BE OUTPUT 275  C 283 C ; OUTPUT ROUTINE FOR SERIAL EPSON AND TI PRINTER 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-8 802FCONS.MAC--CONSOLE I/O MODULE 284  C 293 C ; OUTPUT ROUTINE FOR STANDARD 294 C ; CRT TERMINAL DEVICE, SIO 295 C ; CHANNEL B. 296 C 297C CONIN: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 240 F328 00 C DEFB 0 ; CONSOLE POSITION IN IOBYTE 241 F329 F331 C DEFW TTYIN ; CONSOLE PRINTER DEVICE 242 F32B F332 C DEFW  ; STANDARD CRT TERMINAL DEVICE. 252 C ; SIO CHANNEL B. 253 C ; MOTOR AND LIGHT OFF IN HALF A SECOND 254 C ; WHEN THERE IS NO INPUT ON CONSOLE 255  NZ,CRT20 ; NO, LOOP BACK 264 F340 3E 00 C LD A,0 ; MOTOR AND LIGHT OFF 265 F342 D3 18 C OUT (FDD),A ; SEND OUT 266 F344 32 F878 C LD (MOTFLG),A ; MOTOR ON-OFF FLAG 267 F347 18 ED C 276 F34F CD F6FF C CONOUT: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 277 F352 00 C DEFB 0 ; CONSOLE POSITION IN IOBYTE 278 F353 F35B C DEFW TTYOUT ; CONSOLE PRI C ; SIO CHANNEL A. 285 C 286 F35B CD F30B C TTYOUT: CALL TTYST ; CHECK STATUS OF PRINTER 287 F35E 28 FB C JR Z,TTYOUT ; NOT READY, LOOP BACK 288 F360 F366 DB 0F C CRTOUT: IN A,(SIOBC0) ; CHECK STATUS OF TRANSMITTER 298 F368 CB 57 C BIT TRXRDY,A ; TRANSMITTER BUFFER EMPTY? 299 F36A 28 FA C JR Z,CRTOUT ; NOT YET. 300 F36C 79 CRTIN ; CONSOLE CRT DEVICE 243 F32D F418 C DEFW BATIN ; CONSOLE BATCH DEVICE 244 F32F F418 C DEFW UC1IN ; USER DEFINED CONSOLE 245 C 246 C  C 256 F332 C5 C CRTIN: PUSH BC 257 F333 01 8000 C LD BC,8000H ; TIME-OUT FOR 1/2 SECOND 258 F336 CD F31C C CRT20: CALL CRTST ; CHECK THE STATUS 259 F339 20 C JR CRT20 ; LOOP UNTIL WE GET A CHARACTER 268 F349 DB 0D C CRT10: IN A,(SIOBD0) ; FETCH THE CHARACTER 269 F34B E6 7F C AND 7FH ; STRIP OFF PARITY BIT 270 F34D C1 C PNTER DEVICE 279 F355 F366 C DEFW CRTOUT ; CONSOLE CRT DEVICE 280 F357 F418 C DEFW BATOUT ; CONSOLE BATCH DEVICE 281 F359 F418 C DEFW UC1OUT ; USER DEFINED CONSOLE 282  79 C LD A,C ; GET CHARACTER IN REG. C 289 F361 E6 7F C AND 7FH ; STRIP OFF PARITY 290 F363 D3 21 C OUT (SIOBD1),A ; SEND OUT 291 F365 C9 C RET 292  C LD A,C ; TRANSFER THE CHARACTER 301 F36D D3 0D C OUT (SIOBD0),A ; OUTPUT THE CHARACTER TO SIO 302 F36F C9 C RET 303 C 304 C ;    PAPER TAPE READER ROUTINE, 305 C ; MOSTLY UNUSED. 306 C 307 F370 CD F6FF C READER: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 308 F373 02 C DEF C ; CURRENTLY DUMMIED OUT, 317 C ; PRETTY MUCH. 318 C 319 F37C CD F6FF C PUNCH: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 320 F37F  C ; THIS PORT HAS A STANDARD CENTRONICS INTERFACE. 328 C ; ENTRY: C=CHARACTER TO BE OUTPUT 329 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-MarRINTING DEVICE 336 C 337 C ; THIS IS THE PRINTER OUTPUT ROUTINE 338 C ; FOR THE CENTRONICS PARALLEL DEVICE. 339 C 340 A ; TO INDICATE THAT DATA IS 347 F3A2 DB 1C C IN A,(PIOAD) ; VALID IN CHANNEL B DATA PORT 348 F3A4 CB C7 C SET STROBE,A ; RAISE STROBE LINE AGAIN 349 F3A6 D3 1C C OUT (PIOAD),A ; COMPLETE C UL1LST: LD A,(UL1SIZ) ; SIZE OF PRINTER BUFFER. 359 F3AC 47 C LD B,A ; FOR LATER. 360 F3AD B7 C OR A ; CLEAR CARRY 361 F3AE 1F C RRA ; DIVIDE BY 2 362 F3AF 5FB 2 ; POSITION OF READER IN IOBYTE 309 F374 F331 C DEFW TTYIN ; STANDARD TELETYPE DEVICE 310 F376 F418 C DEFW PTRRDR ; HIGH SPEED PAPER TAPE READER 311 F378 F418 C DEFW UR1RDR ; US04 C DEFB 4 ; PUNCH POSITION IN IOBYTE 321 F380 F35B C DEFW TTYOUT ; TELETYPE OUTPUT 322 F382 F418 C DEFW PTPPUN ; HIGH SPEED PUNCH DEVICE 323 F384 F418 C DEFW UP1-80 PAGE 1-9 802FCONS.MAC--CONSOLE I/O MODULE 330 F388 CD F6FF C LIST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 331 F38B 06 C DEFB 6 ; LIST POSITION IN IOBYTE 332 F38C F35B C DEFW  F394 CD F3F9 C LPTLST: CALL LPTLSS ; CHECK STATUS 341 F397 20 FB C JR NZ,LPTLST ; LOOP UNTIL PRINTER READY 342 F399 79 C LD A,C ; LOAD THE CHARACTER 343 F39A D3 1D C  STROBE SIGNAL 350 F3A8 C9 C RET 351 C 352 C 353 C 354 C ; HERE IS THE SERIAL PRINTER DRIVER,  C LD E,A ; E <- UL1SIZ/2 363 F3B0 21 FA91 C LD HL,UL1CNT ; CURRENT BUFFER COUNT 364 F3B3 34 C INC (HL) ; BUMP IT. 365 C 366 F3B4 DB 23 CER DEFINED READER #1 312 F37A F418 C DEFW UR2RDR ; USER DEFINED READER #2 313 C 314 C 315 C ; PAPER TAPE PUNCH ROUTINE, 316 PUN ; USER DEFINED PUNCH #1 324 F386 F418 C DEFW UP2PUN ; USER DEFINED PUNCH #2 325 C 326 C ; SEND A CHARACTER TO THE PARALLEL PORT. 327 TTYOUT ; OUTPUT TO TELETYPE DEVICE 333 F38E F366 C DEFW CRTOUT ; OUTPUT TO CRT DEVICE 334 F390 F394 C DEFW LPTLST ; LINE PRINTER DEVICE 335 F392 F3A9 C DEFW UL1LST ; USER DEFINED POUT (PIOBD),A ; INTO PIO CHANNEL B DATA REG. 344 F39C DB 1C C IN A,(PIOAD) ; READ PRINTER CONTROL LINES 345 F39E CB 87 C RES STROBE,A ; PULSE THE STROBE LINE 346 F3A0 D3 1C C OUT (PIOAD),WHICH EXPECTS 355 C ; THE DEVICE ON THE OTHER END TO SUPPORT AN ETX/ACK 356 C ; PROTOCOL. PORT USED IS SIO CHANNEL A. 357 C 358 F3A9 3A F8A8  UL1L10: IN A,(SIOBC1) ; READ STATUS 367 F3B6 CB 47 C BIT RCVRDY,A ; DO WE HAVE AN INPUT CHARACTER? 368 F3B8 28 08 C JR Z,UL1L20 ; NO. SEND CHARACTER. 369 F3BA DB 21 C IN A,(SIOBD1)    ; GRAB THE CHARACTER. 370 F3BC E6 7F C AND 7FH ; STIP PARITY. 371 F3BE FE 06 C CP ASCACK ; IS IT ACK? 372 F3C0 28 22 C JR Z,UL1L60 ; YES, PROCESS IT. 373 F3C2 7B C  379 F3CA 28 FA C JR Z,UL1L30 ; NOT YET. 380 F3CC 3E 03 C LD A,ASCETX ; SEND OFF THE END-OF- 381 F3CE D3 21 C OUT (SIOBD1),A ; BLOCK CHARACTER. 382 F3D0 18 06 C JR UOUTPUT 390 F3DA CB 57 C BIT TRXRDY,A ; ROUTINE AND EXIT 391 F3DC 28 FA C JR Z,UL1L50 ; LOOP UNTIL TRANSMITTER READY. 392 F3DE 79 C LD A,C ; CHARACTER HAS BEEN IN REG. C 393 F3DF  ; NO, SPURIOUS ACK. 401 C 402 F3EA 77 C UL1L70: LD (HL),A ; ADJUST THE BUFFER COUNT 403 F3EB 18 EB C JR UL1L50 ; AND SEND THE CHARACTER. 404 C1 F30B C DEFW TTYST ; STATUS OF TELETYPE DEVICE 413 F3F3 F31C C DEFW CRTST ; STATUS OF CRT DEVICE 414 F3F5 F3F9 C DEFW LPTLSS ; STATUS OF LINE PRINTER DEVICE 415 F3F7 F404 02FCONS.MAC--CONSOLE I/O MODULE 422 C ; 3) A FAULT OCCURED 423 C 424 F3F9 DB 1C C LPTLSS: IN A,(PIOAD) ; READ PRINTER STATUS 425 C  UL1L20: LD A,E ; GET UL1SIZ/2 374 F3C3 BE C CP (HL) ; IS BUFFER HALF-FULL? 375 F3C4 20 0C C JR NZ,UL1L40 ; NO, NO NEED FOR ETX. 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80L1L50 ; NOW OUTPUT THE CHARACTER 383 C 384 F3D2 78 C UL1L40: LD A,B ; ORIGINAL BUFFER SIZE 385 F3D3 BE C CP (HL) ; CHECK FOR FULL AND OVERFLOW. 386 F3D4 28 F0  E6 7F C AND 7FH ; ALL THIS TIME. STRIP PARITY. 394 F3E1 D3 21 C OUT (SIOBD1),A ; SHIP IT! 395 F3E3 C9 C RET ; ONLY EXIT POINT. 396 C 397 F3E4 7E 405 C ; TEST THE STATUS OF THE PRINTER. 406 C ; THEN RETURN NOT READY FLAG. 407 C ; EXIT: A=0 -> PRINTER IS NOT READY 408  C DEFW UL1LSS ; STATUS OF USER DEFINED PRINTING DEVICE 416 C 417 C 418 C ; PARALLEL PRINTER STATUS CHECK. 419 C ; AND PIOMSK ; MASK OFF DON'T CARE BITS 426 C ; XOR PIOERR ; ERROR MASK, PRINTER READY? 427 C ; JR NZ,LPTS10 ; NO. 428 C ; DEC A ; YES, RETURN FF IN A  3.36 17-Mar-80 PAGE 1-10 802FCONS.MAC--CONSOLE I/O MODULE 376 C 377 F3C6 DB 23 C UL1L30: IN A,(SIOBC1) ; PREPARE FOR OUTPUT. 378 F3C8 CB 57 C BIT TRXRDY,A ; CAN WE OUTPUT?  C JR Z,UL1L30 ; FULL, SO SEND ANOTHER ETX 387 F3D6 38 DC C JR C,UL1L10 ; OVERFLOW, WAIT FOR ACK. 388 C 389 F3D8 DB 23 C UL1L50: IN A,(SIOBC1) ; THIS IS THE REAL  C UL1L60: LD A,(HL) ; DID WE EVER SEND AN ETX? 398 F3E5 93 C SUB E ; I.E., IS BUFFER > = HALF FULL? 399 F3E6 28 02 C JR Z,UL1L70 ; YES. 400 F3E8 38 EE C JR C,UL1L50 C ; A=0FFH -> PRINTER IS READY 409 C 410 F3ED CD F6FF C LISTST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE 411 F3F0 06 C DEFB 6 ; LIST POSITION IN IOBYTE 412 F3F ; RETURNS PRINTER NOT READY BECAUSE: 420 C ; 1) IT IS OUT OF PAPER 421 C ; 2) IT IS BUSY 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-11 8429 C 430 F3FB CB 6F C BIT PRTBSY,A ; TEST PRINTER BUSY BIT 431 F3FD 3E 00 C LD A,0 432 F3FF C0 C RET NZ 433 F400 2F C CPL ;    SET A = FFH AND ZERO FLAG = 1 434 F401 C9 C RET 435 C 436 F402 AF C LPTS10: XOR A ; INDICATE NOT READY 437 F403 C9 C RET ; BY RETURNING 0 IN AATIVE. 446 F40D C0 C RET NZ ; LISTER IS READY. 447 C 448 F40E DB 23 C IN A,(SIOBC1) ; OTHERWISE SEE IF WE HAVE 449 F410 CB 47 C BIT RCVRDY,A ; AN INUTINE, USED FOR UNDEFINED BIOS 458 C ; HOOKS, AND UNUSED IOBYTE DRIVERS. 459 C 460 F417 C9 C UNUSED: RET ; JUST RETURN FOR NOW 461 C ATOUT: 469 F418 C UC1OUT: 470 C 471 F418 C PTRRDR: 472 F418 C UR1RDR: 473 F418 C UR2RDR: 474  F41B C UC1ST: 486 F41B AF C XOR A ; ALWAYS BUSY 487 F41C C9 C RET 488 C 489 C ; END OF 802FCONS.MAC 490  C 498 F41D 3A F984 C HOME: LD A,(HSTWRT) ; CHECK WRITE PENDING DATA IN BUFFER 499 F420 B7 C OR A 500 F421 20 03 C JR NZ,HOMED ; IF WRITE DATA PENDING THEN SKIP 501  438 C 439 C ; CHECK THE STATUS OF SERIAL PRINTER, 440 C ; CP/M UL1 DEVICE. 441 C 442 F404 21 FA91 C UPUT CHARACTER READY. 450 F412 3E FF C LD A,0FFH ; ANTICIPATE AFFIRMATIVE AGAIN. 451 F414 C0 C RET NZ ; WE ARE ASSUMING CHAR. IS AN ACK. 452 C 453 F415 AF  462 C ; PAPER TAPE READER, PUNCH AND CONSOLE 463 C ; DUMMY ROUTINES. USER MAY FILL OUT LATER. 464 C 465 F418 C BATIN: 4 C 475 F418 C PTPPUN: 476 F418 C UP1PUN: 477 F418 C UP2PUN: 478 C 479 F418 3E 1A C LD A,1AH ; RETU 491 SUBTTL 802FDISK.MAC--DISK I/O MODULE 492 PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-13 802FD C 502 F423 32 F983 C LD (HSTACT),A 503 C 504 F426 AF C HOMED: XOR A 505 F427 32 F97D C LD (SEKTRK),A ; RESET SEEK TRACK TO ZEROL1LSS: LD HL,UL1CNT ; CURRENT BUFFER COUNT 443 F407 3A F8A8 C LD A,(UL1SIZ) ; MAX COUNT. 444 F40A BE C CP (HL) ; ROOM FOR MORE CHARACTER? 445 F40B 3E FF C LD A,0FFH ; ANTICIPATE AFFIRM C XOR A ; WE MUST NOT BE READY YET 454 F416 C9 C RET 455 C 456 C ; FOLLOWING IS JUST A GENERAL-PURPOSE 457 C ; DUMMY RO66 F418 C UC1IN: 467 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-12 802FCONS.MAC--CONSOLE I/O MODULE 468 F418 C BRN EOF. 480 F41A C9 C RET 481 C 482 C ; DUMMY CONSOLE STATUS ROUTINES 483 C 484 F41B C BATST: 485ISK.MAC--DISK I/O MODULE 493 494 C INCLUDE 802FDISK.MAC 495 C 496 C ; HOME THE HEADS TO TRACK 0 497  506 F42A C9 C RET 507 C 508 C ; DISK SELECT ENTRY ROUTINE 509 C ; ACCEPTS: C = DRIVE SELECT (WITH C=0 FOR SELECT DRIVE"A") 510    C ; RETURNS: HL = DPB POINTER OF DRIVE SELECT (IF C=VALID DRIVE NUMBER) 511 C ; HL = 0H IF (C=INVALID DRIVE NUMBER) 512 C 513 F42B 21 0000  LD L,A 522 F436 26 00 C LD H,0 523 F438 29 C ADD HL,HL 524 F439 29 C ADD HL,HL 525 F43A 29 C ADD HL,HL 526 F43B 29 C ADD HL,H C LD (SEKTRK),A 536 F445 C9 C RET 537 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-14 802FDISK.MAC--DISK I/O MODULE 538  C SETDMA: LD (DMAADR),BC 548 F44F C9 C RET 549 C 550 C ; SECTRAN -- TRANSLATE SECTOR 551 C ; ACCEPTS: BC = LOGICAL SECTORD CP/M SECTOR 561 C ; INTO SELECTED DMA BUFFER POINTER 562 C 563 F453 AF C READ: XOR A 564 F454 32 F985 C LD (UNACNT),A 565 F457 3E 01 ; THIS ROUTINE WRITE THE SELECTED DMA BUUFER POINTER 574 C ; INTO SELECTED CP/M SECTOR 575 C 576 F467 AF C WRITE: XOR A 577 F468 32 F98B C L C SELDSK: LD HL,0 ; SET HL = ERROR RETURN CODE 514 F42E 79 C LD A,C 515 F42F 32 F97C C LD (SEKDSK),A ; SAVE DRIVE NUMBER 516 F432 FE 02 C CP MAXDRV+1 ; CHECK FOR VALID DRIVE L ; MULTIPLY BY 16 527 F43C 11 F879 C LD DE,DPBASE ; BASE OF PARAMETER BLOCK 528 F43F 19 C ADD HL,DE ; HL=.DPB(CURDSK) 529 F440 C9 C RET 530 C 5 C ; SETSEC -- SET READ/WRITE SECTOR 539 C ; ACCEPTS: C = SECTOR NUMBER 540 C 541 F446 79 C SETSEC: LD A,C 542 F447 32 F97E C  552 C ; DE = TRANSLATIN TABLE ADDRESS 553 C ; RETURNS: HL = PHYSICAL SECTOR 554 C 555 F450 60 C SECTRN: LD H,B 556 F451  C LD A,1 566 F459 32 F98B C LD (READOP),A ; SET READ OPERATION 567 F45C 32 F98A C LD (RSFLAG),A ; MUST READ DATA 568 F45F 3E 02 C LD A,WRUAL 569 F461 32 F98C D (READOP),A ; SET OPERATION TO WRITE 578 F46B 79 C LD A,C ; SAVE WRITE TYPE 579 F46C 32 F98C C LD (WRTYPE),A 580 F46F FE 02 C CP WRUAL ; WRITE UNALLOCATED? 581 F471 20 17  517 F434 D0 C RET NC ; EXIT WITH HL = 0H 518 C 519 C ; DRIVE NUMBER IS IN PROPER RANGE 520 C 521 F435 6F C 31 C ; SETTRK -- SET READ/WRITE TRACK 532 C ; ACCEPTS: C = TRACK NUMBER 533 C 534 F441 79 C SETTRK: LD A,C 535 F442 32 F97D  LD (SEKSEC),A 543 F44A C9 C RET 544 C 545 C ; SETDMA -- SET READ/WRITE DMA BUFFER ADDRESS 546 C 547 F44B ED 43 F98D  69 C LD L,C 557 F452 C9 C RET 558 C 559 C ; READ CP/M SECTOR ENTRY POINT 560 C ; THIS ROUTINE READ THE SELECTEC LD (WRTYPE),A ; TREAT AS UNALLOC 570 F464 C3 F4CC C JP RDWTCM ; PERFORM THE READ 571 C 572 C ; WRITE ROUTINE ENTRY POINT 573 C  C JR NZ,WRIT10 ; CHECK FOR UNALLOC 582 C 583 C ; WRITING TO AN UNALLOCATED BLOCK 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-15    802FDISK.MAC--DISK I/O MODULE 584 C 585 F473 3E 10 C LD A,BLKSIZ/128 ; NUMBER OF SECTORS/BLOCK 586 F475 32 F985 C LD (UNACNT),A ; UNALLOCATED SECTORS REMAINING 587 F478  C 596 F48A 3A F985 C WRIT10: LD A,(UNACNT) ; ANY UNALLOCATED SECTOR REMAIN? 597 F48D B7 C OR A 598 F48E 28 34 C JR Z,WRIT30 ; SKIP IF NOT 599 0 ; SKIP IF NOT 608 C 609 C ; DISKS ARE THE SAME 610 C 611 F49D 3A F97D C LD A,(SEKTRK) ; CP/M TRACK NO. 612 F4A0 21 F987  ; SEEK.SEC = UNALL.SEC? 621 F4AD 20 15 C JR NZ,WRIT30 ; SKIP IF NOT 622 C 623 C ; MATCH, MOVE "UNASEC" TO NEXT SECTOR FOR FUTURE REF. 624 O NEXT TRACK 631 C 632 F4B5 36 00 C LD (HL),0 ; RESET SECTOR 633 F4B7 3A F987 C LD A,(UNATRK) 634 F4BA 3C C INC A 635 F4BB 32 F987 C R, REQUIRES PRE-READ 644 C 645 F4C4 AF C WRIT30: XOR A 646 F4C5 32 F985 C LD (UNACNT),A ; RESET UNALLOC. COUNTER = 0 647 F4C8 3C C INC A 648 F4C9 3A F97C C LD A,(SEKDSK) ; CP/M DRIVE. 588 F47B 32 F986 C LD (UNADSK),A ; TO UNALLOCATED DISK 589 F47E 3A F97D C LD A,(SEKTRK) ; CP/M TRACK NO. 590 F481 32 F987 C LD (UNATRK),A  C 600 C ; MORE UNALLOCATED SECTORS IN THIS BLOCK 601 C 602 F490 3D C DEC A ; UNACNT = UNACNT-1 603 F491 32 F985 C LD (UNACNT), C LD HL,UNATRK ; UNALLOCATED TRACK NO. 613 F4A3 BE C CP (HL) ; SEEK.TRK = UNALL.TRK? 614 F4A4 20 1E C JR NZ,WRIT30 ; SKIP IF NOT 615 C 616  C 625 F4AF 34 C INC (HL) ; UNASEC = UNASEC+1 626 F4B0 7E C LD A,(HL) 627 F4B1 FE 48 C CP CPMSPT ; CHECK END OF SECTOR IN CUR.TRACK? 628 F4B3 38 09 C  LD (UNATRK),A ; UNATRK = UNATRK+1 636 C 637 C ; MATCH FOUND, MARK AS UNNECESSARY READ 638 C 639 F4BE AF C WRIT20: XOR A 640  32 F98A C LD (RSFLAG),A ; SET PRE-READ FLAG = YES. 649 C 650 C ; COMMON CODE FOR READ AND WRITE ROUTINE 651 C 652 F4CC AF  591 F484 3A F97E C LD A,(SEKSEC) ; CP/M SECTOR NO. 592 F487 32 F988 C LD (UNASEC),A 593 C 594 C ; CHECK FOR WRITE TO UNALLOCATED SECTOR 595 A 604 F494 3A F97C C LD A,(SEKDSK) ; GET SEEK DISK INTO A 605 F497 21 F986 C LD HL,UNADSK 606 F49A BE C CP (HL) ; SEEK.DSK = UNALL.DSK? 607 F49B 20 27 C JR NZ,WRIT3 C ; TRACKS ARE THE SAME 617 C 618 F4A6 3A F97E C LD A,(SEKSEC) ; GET SEEK SECTOR INTO A 619 F4A9 21 F988 C LD HL,UNASEC 620 F4AC BE C CP (HL) JR C,WRIT20 ; SKIP IF NO OVERFLOW 629 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-16 802FDISK.MAC--DISK I/O MODULE 630 C ; OVERFLOW T F4BF 32 F98A C LD (RSFLAG),A ; SET PRE-READ FLAG = NO 641 F4C2 18 08 C JR RDWTCM ; PERFORM WRITE CP/M SECTOR 642 C 643 C ; NOT AN UNALLOCATED SECTO C RDWTCM: XOR A 653 F4CD 32 F989 C LD (ERFLAG),A ; RESET ERROR FLAG 654 F4D0 3A F97E C LD A,(SEKSEC) ; CONVERT SEEEK SECTOR TO HOST SECTOR 655 F4D3 B7 C OR A ; CLEAR CARRY FLAG     656 F4D4 1F C RRA 657 F4D5 32 F982 C LD (SEKHST),A ; TEMPORARY SECTOR NO. 658 C 659 C ; ACTIVE HOST SECTOR? 660 C A,(SEKDSK) 670 F4E4 21 F97F C LD HL,HSTDSK 671 F4E7 BE C CP (HL) ; SAME DISK? 672 F4E8 20 12 C JR NZ,RDWT10 ; SKIP IF NOT MATCH 673 C 674  C ; SAME DISK, SAME TRACK, SAME BUFFER? 682 C 683 F4F3 3A F982 C LD A,(SEKHST) 684 F4F6 21 F981 C LD HL,HSTSEC 685 F4F9 BE C CP EN WRITE DATA TO DISK 694 F505 C0 C RET NZ ; ERROR IN WRITING TO DISK. 695 C 696 C ; MAY HAVE TO PRE-READ DATA TO HOST BUFFER 697 C RDWT30 ; NO PRE-READ REQUIRED 707 F51E CD F55F C CALL READHST ; IF YES, THEN READ DATA FROM DISK 708 F521 C0 C RET NZ ; ERROR IN READING 709 C 710 F522 AF 0 719 F52E CB 3C C SRL H 720 F530 CB 1D C RR L ; HL = ((SEKSEC)&SECMSK)*128 721 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE  661 F4D8 21 F983 C LD HL,HSTACT 662 F4DB 7E C LD A,(HL) 663 F4DC 36 01 C LD (HL),1 ; ALWAY BECOMES 1 664 F4DE B7 C OR A 665 F4DF 28 25 C  C ; SAME DISK, SAME TRACK? 675 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-17 802FDISK.MAC--DISK I/O MODULE 676 F4EA 3A F97D C (HL) 686 F4FA 28 2A C JR Z,RDWT40 ; SKIP IF MATCH 687 C 688 C ; PROPER DISK, BUT NOT CORRECT SECTOR 689 C 690 F4FC 3A F984  698 F506 3A F97C C RDWT20: LD A,(SEKDSK) 699 F509 32 F97F C LD (HSTDSK),A 700 F50C 3A F97D C LD A,(SEKTRK) 701 F50F 32 F980 C LD (HSTTRK),A 702 F512 3A F982  C RDWT30: XOR A ; INTO BUFFER. 711 F523 32 F984 C LD (HSTWRT),A ; RESET PENDING WRITE FLAG 712 C 713 C ; COPY DATA TO OR FROM BUFFER 714 1-18 802FDISK.MAC--DISK I/O MODULE 722 C ; HL HAS RELATIVE HOST BUFFER ADDRESS 723 C 724 F532 11 F991 C LD DE,HSTBUF 725 F535 19 C ADD HL,D JR Z,RDWT20 ; FILL BUFFER IN ACTIVE FLAG = 0 666 C 667 C ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER? 668 C 669 F4E1 3A F97C C LD  LD A,(SEKTRK) 677 F4ED 21 F980 C LD HL,HSTTRK 678 F4F0 BE C CP (HL) ; SAME TRACK? 679 F4F1 20 09 C JR NZ,RDWT10 ; SKIP IF NOT MATCH 680 C 681  C RDWT10: LD A,(HSTWRT) ; WRITE DATA PENDING IN BUFFER? 691 F4FF B7 C OR A 692 F500 28 04 C JR Z,RDWT20 ; NO NEED TO FLUSH BUFFER 693 F502 CD F566 C CALL WRITEHST ; IF YES, TH C LD A,(SEKHST) 703 F515 32 F981 C LD (HSTSEC),A 704 F518 3A F98A C LD A,(RSFLAG) ; CHECK BUFFER REQUIRES PRE-READ 705 F51B B7 C OR A 706 F51C 28 04 C JR Z, C 715 F526 3A F97E C RDWT40: LD A,(SEKSEC) ; COMPUTE RELATIVE HOST BUFFER ADDRESS 716 F529 E6 01 C AND SECMSK 717 F52B 67 C LD H,A 718 F52C 2E 00 C LD L,E 726 F536 ED 5B F98D C LD DE,(DMAADR) ; GET/PUT CP/M DATA BUFFER POINTER 727 F53A 01 0080 C LD BC,128 ; SET BC = LENGTH TO MOVE 728 F53D 3A F98B C LD A,(READOP) ; WHICH WAY? 729 F540 B7     C OR A 730 F541 20 06 C JR NZ,RDWT50 ; SKIP IF READ OPERATION 731 C 732 C ; WRITE OPERATION, MARK AND SWITCH DIRECTION 733  C ; DATA HAS BEEN MOVE TO/FROM HOST BUFFER 743 C 744 F54B 3A F98C C LD A,(WRTYPE) ; CHECK WRITE TYPE OPERATION 745 F54E FE 01 C CP WRDIR ; DIRECTORY WRITE? WRT),A ; RESET WRITE PENDING FLAG 755 F55B CD F566 C CALL WRITEHST 756 F55E C9 C RET 757 C 758 C ; HERE ARE THE SECTOR READ/WRITE FUNCTIONS. W C 767 F566 C WRITEHST: 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-19 802FDISK.MAC--DISK I/O MODULE 768 F566 3E A0 C LD A,WTSCMD ; FDC WRITE CO CALL NZ,SELDRV ; NO, HARDWARE SELECT THE DRIVE 778 F57B CD F662 C CALL SELSID ; SELECT THE PROPER SIDE 779 C 780 C ; READY TO READ OR WRITE A PHYSICAL SECTOR  C JR NZ,RWHS20 ; ADJUST RETRY COUNTER 789 F58E 3A F975 C LD A,(COMAND) ; SET UP FDC 790 F591 D3 14 C OUT (FDCCMD),A ; COMMAND REGISTER 791 F593 CD F5DB C CALL WAIT ; WAIT FOR CONTROLL C 734 F543 3E 01 C LD A,1 735 F545 32 F984 C LD (HSTWRT),A ; SET WRITE PENDING FLAG ON 736 F548 EB C EX DE,HL ; SOURCE/DESTINATION POINTERS SWAP 737 746 F550 28 05 C JR Z,RDWT60 ; IF NOT A DIRECTORY WRITE THEN EXIT 747 F552 3A F989 C LD A,(ERFLAG) ; WITH ERROR FLAG =0, AND Z=1 748 F555 B7 C OR A 749 F556 C9 C RE 759 C ; WANT TO READ/WRITE TO DISK USING THE PARAMETERS 760 C ; SECTOR, TRACK, DMA ADDRESS. 761 C 762 F55F C READHST: 763 MMAND 769 F568 21 F790 C LD HL,WTSTAB ; DMA INITIALIZATION TABLE FOR WRITE 770 C 771 F56B 32 F975 C RWHSEC: LD (COMAND),A 772 F56E 22 F97A C LD (DMATAB),HL 7 781 C 782 F57E 3E 0A C LD A,10 ; NO. OF RETRIES 783 F580 32 F977 C LD (RETRY),A ; ON DISK I/O OPERATION 784 C 785 F583 2A F97A C ER NOT BUSY 792 F596 20 05 C JR NZ,RWHS20 ; ERROR ON READ/WRITE 793 F598 3A F989 C LD A,(ERFLAG) ; RETURN CODE 794 F59B B7 C OR A ; SET/CLEAR Z FLAG 795 F59C C9 C  C 738 C ; BC INITIALLY 128, DE DESTINATION, HL IS SOURCE POINTER 739 C 740 F549 ED B0 C RDWT50: LDIR 741 C 742 ET 750 C 751 C ; ALWAYS FLUSH A DIRECTORY BUFFER 752 C 753 F557 AF C RDWT60: XOR A 754 F558 32 F984 C LD (HST F55F 3E 80 C LD A,RDSCMD ; FDC READ COMMAND 764 F561 21 F77F C LD HL,RDSTAB ; DMA INITIALIZATION TABLE 765 F564 18 05 C JR RWHSEC ; CODE COMMON TO READ AND WRITE 766 73 C 774 F571 3A F97F C LD A,(HSTDSK) 775 F574 21 F876 C LD HL,DRIVE ; CURRENT DRIVE 776 F577 BE C CP (HL) ; SAME DRIVE? 777 F578 C4 F693 C  RWHS10: LD HL,(DMATAB) ; GET DMA INITIALIZE PARAMETER POINTER 786 F586 CD F6EE C CALL PRTINI ; DO DMA INITIALIZATION. 787 F589 CD F5BB C CALL SEEK ; SEEK THE USER DEFINED TRACK 788 F58C 20 0F  RET ; DISK I/O SUCCESSFUL 796 C 797 C ; WE HAD AN ERROR ON READ/WRITE OPERATION 798 C 799 F59D CD F6D9 C RWHS20: CALL RESDMA ; R   ESET THE DMA ON ABORT 800 F5A0 3A F989 C LD A,(ERFLAG) ; IF DRIVE NOT READY, 801 F5A3 CB 7F C BIT FDCRDY,A ; DON'T BOTHER WITH RETRIES 802 F5A5 C0 C RET NZ ; RETURN ERROR FLAG IN A 8 C 812 F5B3 CD F71A C RWHS30: CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE 813 F5B6 3A F989 C LD A,(ERFLAG) ; RETURN ERROR 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-8802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-21 802FSUBS.MAC--SUBROUTINES MODULE 822 823 C INCLUDE 802FSUBS.MAC 824 C 825 T THE TRACK FOR THIS DRIVE 833 F5C6 D3 15 C OUT (FDCTRK),A ; SEND IT TO THE CONTROLLER 834 F5C8 47 C LD B,A ; SAVE FOR LATER 835 F5C9 3A F980 C LD A,(HSTTRK) ; GET THE SOUGHT-AFTER TRAC C ; NOW TEST FOR COMPLETION 844 C 845 F5D5 CD F5DB C CALL WAIT ; WAIT UNTIL NOT BUSY 846 F5D8 E6 98 C AND SEEMSK ; AND OUT TRACK 0 BIT 847 F5DA C9  855 C 856 F5DB 3E 0F C WAIT: LD A,15 ; WE MUST DELAY ABOUT 857 F5DD 3D C WAIT10: DEC A ; 60 USECS. BEFORE READING 858 F5DE 20 FD C JR NZ,WAIT10 ; TH03 C 804 F5A6 21 F977 C LD HL,RETRY ; MORE RETRIES LEFT? 805 F5A9 7E C LD A,(HL) 806 F5AA 35 C DEC (HL) ; BUMP DOWN COUNT 807 F5AB B7 0 3.36 17-Mar-80 PAGE 1-20 802FDISK.MAC--DISK I/O MODULE 814 F5B9 B7 C OR A ; SET/CLEAR Z FLAG. 815 F5BA C9 C RET 816 C 817 C 818 C ; THIS ROUTINE DOES THE ACTUAL SEEKING. 826 C 827 F5BB 21 F98F C SEEK: LD HL,TRKTAB ; CURRENT TRACK TABLE 828 F5BE 3A F97F C LD A,(HSTDSK) ; CURRENT DRIVE 8K. 836 F5CC 77 C LD (HL),A ; PLACE IT IN TRACK TABLE 837 F5CD B8 C CP B ; SAME TRACK? 838 F5CE C8 C RET Z ; YES, NO NEED TO SEEK 839 F5CF D3 17 C OUT (F C RET ; MAY HAVE FAILED 848 C 849 C ; THIS ROUTINE LOOPS UNTIL THE FDC IS 850 C ; IN A NON-BUSY STATE, OR UNTIL A NOT- 851 E STATUS. 859 C 860 F5E0 ED 43 F86F C LD (TEMPBC),BC ; SAVE REGISTERS 861 F5E4 ED 53 F871 C LD (TEMPDE),DE 862 F5E8 22 F873 C LD (TEMPHL),HL 863 F5EB 01 C000 C OR A 808 F5AC 28 05 C JR Z,RWHS30 ; ALL DONE, WE FAILED. 809 F5AE CD F6C5 C CALL RESTOR ; SEEK TRACK 0. 810 F5B1 18 D0 C JR RWHS10 ; LOOP BACK FOR ANOTHER SHOT. 811  C ; END OF 802FDISK.MAC 819 820 SUBTTL 802FSUBS.MAC--SUBROUTINES MODULE 821 PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-29 F5C1 4F C LD C,A ; MAKE IT AN INDEX INTO 830 F5C2 06 00 C LD B,0 ; TRACK TABLE 831 F5C4 09 C ADD HL,BC ; ADD IN INDEX 832 F5C5 7E C LD A,(HL) ; PULL OUDCDAT),A ; AND GIVE IT TO THE CONTROLLER. 840 F5D1 3E 14 C LD A,SEECMD ; THIS IS THE SEEK COMMAND 841 F5D3 D3 14 C OUT (FDCCMD),A ; GIVE THE ORDER TO FDC 842 C 843  C ; READY CONDITION IS DETECTED. TIME-OUT 852 C ; FOR DRIVE BUSY OCCURS AT APPROX. 853 C ; 1.5 SECONDS AFTER COMMAND 854 C ; INITIATION. C LD BC,0C000H ; TIME OUT FOR 1.25 SECONDS 864 F5EE 3E 00 C LD A,0 865 F5F0 32 F875 C LD (JMPSW),A ; RESET THE FLAG FOR MESSAGE 866 C 802FBIOS.MAC--TELEVIDEO SYST   EM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-22 802FSUBS.MAC--SUBROUTINES MODULE 867 F5F3 DB 14 C WAIT20: IN A,(FDCCMD) ; READ THE FDC STATUS--2.75 868 F5F5 32 F989 C LD (ERFLAG),A ; SAVE ITES, SKIP--1.75 876 F604 0B C DEC BC ; COUNT DOWN--1.50 877 F605 78 C LD A,B ; --2.25 878 F606 B1 C OR C ; TIME OUT?--1.00 879 F607 CC F64E C CALL Z,SIGMSG-ERROR BITS 887 F614 32 F989 C LD (ERFLAG),A ; SAVE STATUS FOR LATER 888 C 889 F617 2A F873 C WAIT50: LD HL,(TEMPHL) ; RESTORE REGISTERS 890 F61A ED 5B F871 C LD D C JR NZ,WAIT40 ; NO, LOOP BACK 900 C 901 F631 F1 C POP AF ; RESTORE REGISTERS 902 F632 2A F873 C LD HL,(TEMPHL) 903 F635 ED 5B F871 C LD DE,(TEMPDEBOOT ; WARM-BOOT 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-23 802FSUBS.MAC--SUBROUTINES MODULE 913 C 914 C ; THIS ROUTINE PRINTS DOO HL,RDYMSG ; PRINT DOOR MESSAGE 923 F65E CD F6E4 C CALL PRTMSG 924 F661 C9 C RET 925 C 926 C ; SELECT THE PROPER SIDE OF THE 927  FOR LATER--3.25 869 F5F8 CB 7F C BIT FDCRDY,A ; IS THE DEVICE NOT READY?--2.00 870 F5FA 20 1B C JR NZ,WAIT50 ; YES, THIS IS AN ERROR--1.25 871 C 872 F5FC F5  ; YES, PRINT MESSAGE--2.50 880 F60A F1 C WAIT40: POP AF ; RESTORE REGISTERS--2.50 881 C 882 F60B CB 47 C BIT FDCBSY,A ; ARE WE PROCESSING A COMMAND?--2.00 883 F60D E,(TEMPDE) 891 F61E ED 4B F86F C LD BC,(TEMPBC) 892 F622 C9 C RET 893 C 894 F623 CD F2FF C WAIT30: CALL CONST ; CONSOLE STATUS 895 F626 FE 00 ) 904 F639 ED 4B F86F C LD BC,(TEMPBC) 905 C 906 F63D 3E D0 C LD A,FRCCMD ; FORCE TERMINATE 907 F63F D3 14 C OUT (FDCCMD),A 908 F641 D3 14 C R MESSAGE WHEN THERE IS AN ACCESS TO 915 C ; A DRIVE WITH DOOR OPENED 916 C 917 F64E 3E 01 C SIGMSG: LD A,1 ; SET FLAG 918 F650 32 F875 C LD (JMP C ; DISKETTE TO SEEK, DEPENDING ON 928 C ; THE LOGICAL SECTOR NO. IN HSTSEC. 929 C ; GO AHEAD AND SET THE FDC SECTOR 930 C ; REGISTER.  C PUSH AF ; SAVE REGISTERS--2.75 873 F5FD 3A F875 C LD A,(JMPSW) ; GET MESSAGE FLAG--3.25 874 F600 FE 00 C CP 0 ; MESSAGE ALREADY SENT OUT?--1.75 875 F602 20 1F C JR NZ,WAIT30 ; Y20 E4 C JR NZ,WAIT20 ; NO, RETURN ERROR CODE--3.00 884 C 885 F60F 32 F979 C LD (UNMSTA),A ; UNMASKED STATUS (FOR DEBUG) 886 F612 E6 DC C AND ERRMSK ; MASK OFF NON C CP 0 ; AVAILABLE INPUT? 896 F628 28 E0 C JR Z,WAIT40 ; NO, SKIP 897 F62A CD F325 C CALL CONIN ; GET CHARACTER 898 F62D FE 03 C CP 03H ; CONTROL-C? 899 F62F 20 D9  OUT (FDCCMD),A 909 F643 CD F6D9 C CALL RESDMA ; RESET DMA 910 F646 3E 00 C LD A,0 911 F648 32 0004 C LD (DEFDSK),A ; SET DEFAULT DRIVE TO A 912 F64B C3 F280 C JP WSW),A 919 F653 3A F97F C LD A,(HSTDSK) ; CURRENT DRIVE 920 F656 C6 41 C ADD A,41H ; MAKE IT ASCII 921 F658 32 F855 C LD (VDRIVE),A ; SAVE FOR LATER 922 F65B 21 F83A C LD 931 C 932 F662 3A F976 C SELSID: LD A,(FDDBYT) ; GET THE DRIVE SELECT LATCH IN MEMORY 933 F665 4F C LD C,A ; HOLD IT IN C FOR A BIT. 934 F666 CB 91 C RES    2,C ; CHOOSE SIDE 0, FOR NOW. 935 F668 3A F981 C LD A,(HSTSEC) ; GET THE LOGICAL HOST SECTOR 936 F66B FE 12 C CP PSPT0 ; SECTOR >= THAN MAXIMUM SECTOR? 937 F66D 38 04 C JR C,SELS10 ; IF  F67A 32 F976 C LD (FDDBYT),A ; RESTORE IT TO THE MEMORY IMAGE 946 F67D D3 18 C OUT (FDD),A ; AND LATCH 947 F67F 3A F878 C LD A,(MOTFLG) ; MOTOR ON-OFF FLAG 948 F682 FE 00 C JR NZ,SELS20 ; NO, LOOP BACK 957 F692 C9 C RET ; ALL DONE. 958 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-24 802FSUBS.MAC--SUBROUTINES MODU; HAVE WE GOT THE RIGHT MASK? 967 F697 28 05 C JR Z,SELD20 ; YES. 968 F699 CB 21 C SLA C ; SHIFT DRIVE MASK OVER 1 BIT LEFT. 969 F69B 3D C DEC A ; DOWN THE COUNTER. 970 F69C W DRIVE. 977 F6A9 C9 C RET 978 C 979 C ; RESET THE DISK SUBSYSTEM BY RESTORING 980 C ; ALL THE HEADS TO TRACK 0. RESTORING 981 C LD B,MAXDRV ; INITIAL DRIVE NO. 989 C 990 F6B3 78 C RESD10: LD A,B ; SELECT THE DRIVE 991 F6B4 32 F97F C LD (HSTDSK),A ; STORE IT IN HSTDSK 992 F6B7 21 F876NOT THEN SELECT SIDE 0 938 F66F CB D1 C SET 2,C ; CHOOSE SIDE 1. 939 F671 D6 12 C SUB PSPT0 ; DE-BIAS SECTOR NO. 940 C 941 F673 3C C SELS10: INC A ; CP 0 ; MOTOR OFF? 949 F684 C0 C RET NZ ; NO, SKIP DELAY 950 F685 3E 01 C LD A,1 951 F687 32 F878 C LD (MOTFLG),A ; SET MOTOR ON FLAG 952 F68A 01 9C40 C LD BC,400LE 959 C ; SELECT THE DRIVE IN HARDWARE. 960 C ; DRIVE TO BE SELECTED IS PASSED 961 C ; IN REGISTER A. 962 C 963 F6918 F8 C JR SELD10 ; AND LOOP. 971 C 972 F69E 3A F976 C SELD20: LD A,(FDDBYT) ; GET MEMORY IMAGE OF DRIVE LATCH 973 F6A1 E6 0F C AND 00001111B ; AND OFF CURRENT DRI C ; DRIVES IN REVERSE ORDER ASSURES THAT 982 C ; DRIVE A WILL ALWAYS BE SELECTED UPON 983 C ; COMPLETION. 984 C 985 F6AA C LD HL,DRIVE 993 F6BA CD F693 C CALL SELDRV 994 F6BD CD F6C5 C CALL RESTOR ; RESTORE THE HEADS TO TRACK 0 995 F6C0 05 C DEC B ; DECREMENT DRIVE NO. 996 F6C1 F2 F6B PHYSICAL SECTORS HAVE ORIGIN 1 942 F674 D3 16 C OUT (FDCSEC),A ; SEND SECTOR TO CONTROLLER 943 F676 32 F877 C LD (TSEC),A ; SAVE FOR LATER 944 F679 79 C LD A,C ; GET NEW SIDE. 945 00 ; NEEDS DELAY FOR ABOUT 300MSEC 953 F68D 0B C SELS20: DEC BC ; COUNT DOWN 954 F68E 78 C LD A,B 955 F68F B1 C OR C ; REACHED ZERO YET? 956 F690 20 FB C 3 77 C SELDRV: LD (HL),A ; SAVE CURRENT DRIVE FOR LATER 964 F694 0E 10 C LD C,00010000B ; THIS IS THE MASK FOR DRIVE 0 965 C 966 F696 B7 C SELD10: OR A VE SELECT BITS. 974 F6A3 B1 C OR C ; OUT WITH THE OLD, IN WITH THE NEW 975 F6A4 32 F976 C LD (FDDBYT),A ; RESTORE MEMORY IMAGE. 976 F6A7 D3 18 C OUT (FDD),A ; AND INFORM LATCH ABOUT NE 3E 02 C RESDSK: LD A,00000010B ; INITIALIZE THE FDD LATCH, MOTOR ON 986 F6AC 32 F976 C LD (FDDBYT),A ; MEMORY IMAGE. 987 F6AF D3 18 C OUT (FDD),A ; HARDWARE LATCH. 988 F6B1 06 01 3 C JP P,RESD10 ; LOOP FOR NEXT DRIVE 997 F6C4 C9 C RET 998 C 999 C ; RESTORE THE HEADS ON THE CURRENTLY 1000 C ; SELE   CTED DRIVE TO TRACK 0. THIS IS 1001 C ; DONE AFTER EACH SEEK, READ, OR, WRITE 1002 C ; FAILURE. ALSO AT WARM AND COLD BOOT. 1003 C ; WE MUST RESET THE CURRENT  ; MAKE DRIVE NO. AN INDEX. 1010 F6CE 19 C ADD HL,DE ; ADD IN INDEX. 1011 F6CF 36 00 C LD (HL),0 ; CLEAR CURRENT TRACK TO 0. 1012 F6D1 3E 00 C LD A,RESCMD ; FDC RESTORE COMMAND 1013 D A,11000011B ; RESET THE DMA 1022 F6DE D3 10 C OUT (DMA),A ; SO THAT IT DOESN'T RUN ON. 1023 F6E0 10 FA C DJNZ RDMA10 ; LOOP FOR ANOTHER TIME 1024 F6E2 C1 C POP BC ; RESTORE REGISTER  C RET Z ; ALL DONE 1035 C 1036 F6E7 4F C LD C,A 1037 F6E8 CD F366 C CALL CRTOUT ; OUTPUT IT 1038 F6EB 23 C INC HL 1039 F6EC 18  PRTINI: LD C,(HL) ; GET PORT ADDRESS 1049 F6EF 23 C INC HL 1050 F6F0 46 C PRTENT: LD B,(HL) ; GET THE COUNT 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1 C HDWINI: CALL RESDSK ; RESET THE DISK SUBSYSTEM 1060 F6F8 21 F7A1 C LD HL,SIOTAB ; INITIALIZE SIO #1 FOR SERIAL PRINTER 1061 F6FB CD F6EE C CALL PRTINI ; BAUD RATE IS SET UP IN PROM CODE 1062 TRACK FOR 1004 C ; THIS DRIVE ALSO. 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-25 802FSUBS.MAC--SUBROUTINES MODULE 1005 C 1006 F6C5  F6D3 D3 14 C OUT (FDCCMD),A ; SEND IT. 1014 F6D5 CD F5DB C CALL WAIT ; WAIT FOR COMPLETION 1015 F6D8 C9 C RET 1016 C 1017 C ; PAIR 1025 F6E3 C9 C RET ; ALL DONE 1026 C 1027 C ; MISCELANEOUS ROUTINES 1028 C 1029 C ; PRINT THE F6 C JR PRTMSG ; AND LOOP BACK 1040 C 1041 C ; GENERAL PORT INITIALIZATION ROUTINE 1042 C ; ENTRY: HL -> PORT ADDRESS 1043 -26 802FSUBS.MAC--SUBROUTINES MODULE 1051 F6F1 23 C INC HL ; POINT TO FIRST DATA BYTE 1052 F6F2 ED B3 C OTIR ; BLOCK OUTPUT 1053 F6F4 C9 C RET 1054 C  C ; BY READING THE DIP SWITCH 1063 F6FE C9 C RET ; MAY BE MORE LATER 1064 C 1065 C ; THIS ROUTINE TRANSFERS CONTROL TO 1066  3A F97F C RESTOR: LD A,(HSTDSK) ; GET THE CURRENT DRIVE 1007 F6C8 21 F98F C LD HL,TRKTAB ; BASE ADDRESS OF CURRENT TRACK TABLE 1008 F6CB 5F C LD E,A 1009 F6CC 16 00 C LD D,0 RESET THE DMA SIX TIMES TOTAL 1018 C 1019 F6D9 C5 C RESDMA: PUSH BC ; DON'T DESTROY REGGIES 1020 F6DA 06 06 C LD B,6 ; COUNTER 1021 F6DC 3E C3 C RDMA10: LSTRING POINTED TO BY HL 1030 C ; AND TERMINATED BY NULL (0). 1031 C 1032 F6E4 7E C PRTMSG: LD A,(HL) 1033 F6E5 B7 C OR A 1034 F6E6 C8  C ; BYTE COUNT 1044 C ; DATA 1045 C ; | 1046 C ; | 1047 C 1048 F6EE 4E C  1055 C ; ADDITIONAL HARWARE SYSTEM 1056 C ; HARDWARE INITIALIZATION 1057 C ; COMES NEXT. 1058 C 1059 F6F5 CD F6AA C ; THE I/O DRIVER INDICATED BY THE 1067 C ; APPROPRIATE BITS IN IOBYTE (0003H). 1068 C ; ENTRY: HL -> 1069 C ; 1070 C ; 1071 C ; 1072 C ; 1073 C 1074 F6FF E1  RETREIVE CURRENT IOBYTE 1082 F709 28 03 C JR Z,IODI20 ; NO SHIFTING NEEDED 1083 C 1084 F70B 1F C IODI10: RRA ; ROTATE BYTE UNTIL DEVICE BITS 1085 F70C 10 FD CTO REGISTERS DE 1093 F715 56 C LD D,(HL) 1094 F716 EB C EX DE,HL ; RESULT INTO HL 1095 F717 D1 C POP DE ; RESTORE REGISTERS 1096 F718 C1 C POP BC 802FBIHE TABLE ADDRESS IN HL 1102 C 1103 F71A 3A F975 C ERRPRT: LD A,(COMAND) ; CURRENT COMMAND 1104 F71D FE 80 C CP 80H ; READ? 1105 F71F 20 05 C JR NZ,WRMSG ; NO, ,(FDDBYT) ; MEMORY IMAGE 1114 F737 CB 57 C BIT 2,A ; SIDE BIT 1115 F739 28 04 C JR Z,ONE ; 0 - SIDE 1 1116 F73B 36 32 C LD (HL),32H ; ASCII 2 1117 F73D 18 02 C JR CON21 F82D C LD HL,VSTAT ; ERROR STATUS 1126 F756 3A F989 C LD A,(ERFLAG) ; GET ERROR FLAG 1127 F759 CD F763 C CALL FTAB 1128 F75C 21 F7F3 C LD HL,ERRMSG ; ERROR MESSAGE TABLE ADDRESS  C IODISP: POP HL ; GET DISPATCH TABLE POINTER 1075 F700 C5 C PUSH BC ; SAVE PERTINENT REGISTERS 1076 F701 D5 C PUSH DE 1077 F702 7E C LD A,(HL) ; DEVICE TYPE 10 DJNZ IODI10 ; ARE LINED UP WITH BIT 0 1086 C 1087 F70E E6 03 C IODI20: AND 03H ; MASK OFF DON'T CARE BITS 1088 F710 17 C RLA ; FORM WORD OFFSET 1089 F711 4F OS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-27 802FSUBS.MAC--SUBROUTINES MODULE 1097 F719 E9 C JP (HL) ; OFF WE GO, INTO THE WILD BLUE YONDER! 1098 C SKIP 1106 F721 21 F830 C LD HL,RMSG ; READ MESSAGE 1107 F724 18 03 C JR ERR10 1108 F726 21 F835 C WRMSG: LD HL,WMSG ; WRITE MESSAGE 1109 F729 11 F7F5 C ERR10: LD DE,VCMD ; CT10 1118 F73F 36 31 C ONE: LD (HL),31H ; ASCII 1 1119 F741 21 F812 C CONT10: LD HL,VTRK ; TRACK VARIABLE 1120 F744 3A F980 C LD A,(HSTTRK) ; CURRENT TRACK NUMBER 1121 F747 CD F763 C1129 F75F CD F6E4 C CALL PRTMSG 1130 F762 C9 C RET 1131 C 1132 C ; THIS ROUTINE CONVERTS HEX CODE INTO ASCII AND FILL OUT THE TABLE 1133 78 F703 23 C INC HL ; ADVANCE POINTER 1079 F704 47 C LD B,A ; SAVE DEVICE TYPE FOR LATER 1080 F705 B7 C OR A ; WHICH DEVICE? 1081 F706 3A 0003 C LD A,(IOBYTE) ; C LD C,A ; FORM 16 BITS, B ALREADY 0 1090 F712 09 C ADD HL,BC ; ADD IN BASE ADDRESS 1091 F713 5E C LD E,(HL) ; TRANSFER DISPATCH ADDRESS 1092 F714 23 C INC HL ;  1099 C ; THIS ROUTINE FILLS OUT THE DETAILED ERROR MESSAGE TABLE 1100 C ; OBTAINING VARIABLE VALUES FROM CURRENT STATE. 1101 C ; THEN CALLS PRTMSG ROUTINE WITH TOMMAND MESSAGE ADDRESS IN TABLE 1110 F72C 01 0005 C LD BC,5 1111 F72F ED B0 C LDIR ; STORE IN TABLE 1112 F731 21 F808 C LD HL,VSIDE ; SIDE VARIABLE 1113 F734 3A F976 C LD A CALL FTAB ; FILL OUT TABLE ROUTINE 1122 F74A 21 F81E C LD HL,VSEC ; SECTOR VARIABLE 1123 F74D 3A F877 C LD A,(TSEC) ; CURRENT TARGET SECTOR 1124 F750 CD F763 C CALL FTAB 1125 F753  C 1134 F763 F5 C FTAB: PUSH AF ; SAVE REGISTERS 1135 F764 0F C RRCA ; ROTATE RIGHT 4 TIMES 1136 F765 0F C RRCA 1137 F766 0F C RRCA     1138 F767 0F C RRCA 1139 F768 CD F773 C CALL GHEX ; CONVERT HIGH ORDER 4 BITS TO ASCII 1140 F76B 77 C LD (HL),A ; STORE INTO TABLE 1141 F76C 23 C INC HL ; NEXT1149 F773 E6 0F C GHEX: AND 0FH ; STRIP HIGH 4 BITS 1150 F775 FE 0A C CP 10 ; NUMERIC? 1151 F777 30 03 C JR NC,G10 ; YES, SKIP FOR ALPHA 1152 F779 C6 30 C ADD A,'0' ; UG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-29 802FEQU.MAC--EQUATES MODULE 1162 1163 C INCLUDE 802FEQU.MAC 1164 C 1165 C  C SIOAD0 EQU 0CH ; CHANNEL A DATA PORT FOR SIO 0 1175 000E C SIOAC0 EQU 0EH ; CHANNEL A CONTROL PORT 1176 000D C SIOBD0 EQU 0DH ; CHANNEL B DATA PORT FOR SIO 0 1177 000F PORT FOR SIO 1 1185 0023 C SIOBC1 EQU 23H ; CHANNEL B CONTROL PORT 1186 C 1187 C ; CTC PORT DEFINITIONS 1188 C 1189 0008 H ; PIO CHANNEL A DATA PORT 1197 001E C PIOAC EQU 1EH ; PIO CHANNEL A CONTROL PORT 1198 001D C PIOBD EQU 1DH ; PIO CHANNEL B DATA PORT 1199 001F C PIOBC EQU 1FH ; PIO CHAN TABLE LOCATION 1142 F76D F1 C POP AF ; RESTORE REGISTERS 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-28 802FSUBS.MAC--SUBROUTINES MODULE 1143 F76E CD F773 C ADD 30 1153 F77B C9 C RET 1154 F77C C6 37 C G10: ADD A,'A'-10 ; ADD 40 1155 F77E C9 C RET 1156 C 1157 C ; END OF 802FSUB ; BDOS CONSTANTS ON ENTRY TO WRITE 1166 C 1167 0000 C WRALL EQU 0 ;WRITE TO ALLOCATED 1168 0001 C WRDIR EQU 1 ;WRITE TO DIRECTORY 1169 0002 C  C SIOBC0 EQU 0FH ; CHANNEL B CONTROL PORT 1178 C 1179 C ; SIO #1 PORT DEFINITIONS 1180 C ; CHANNEL B FOR PRINTER 1181  C CTC0 EQU 08H ; TERMINAL BAUD RATE GENERATOR 1190 0009 C CTC1 EQU 09H ; SERIAL PRINTER BAUD RATE GENERATOR 1191 000A C CTC2 EQU 0AH ; REAL TIME CLOCK CHANNEL 1192 000B NEL B CONTROL PORT 1200 C 1201 C ; SIO STATUS BIT DEFINITIONS 1202 C 1203 0000 C RCVRDY EQU 0 ; RECEIVE CHARACTER AVAILABLE 1204 CALL GHEX 1144 F771 77 C LD (HL),A 1145 F772 C9 C RET 1146 C 1147 C ; HEX INTO ASCII ROUTINE 1148 C S.MAC 1158 C 1159 1160 SUBTTL 802FEQU.MAC--EQUATES MODULE 1161 PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- A WRUAL EQU 2 ;WRITE TO UNALLOCATED 1170 C 1171 C ; SIO #0 PORT DEFINITIONS 1172 C ; CHANNEL B FOR CRT 1173 C 1174 000C C 1182 0020 C SIOAD1 EQU 20H ; CHANNEL A DATA PORT FOR SIO 1 1183 0022 C SIOAC1 EQU 22H ; CHANNEL A CONTROL PORT 1184 0021 C SIOBD1 EQU 21H ; CHANNEL B DATA  C CTC3 EQU 0BH ; FLOPPY DISK INTERRUPT CHANNEL 1193 C 1194 C ; PIO PORT DEFINITIONS 1195 C 1196 001C C PIOAD EQU 1C 0002 C TRXRDY EQU 2 ; TRANSMITTER BUFFER EMPTY 1205 C 1206 C ; PIO CENTRONICS PRINTER INTERFACE DEFINITIONS 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25   , 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-30 802FEQU.MAC--EQUATES MODULE 1207 C 1208 0000 C STROBE EQU 0 ; PRINTER STROBE LINE 1209 0038 C PIOMSK EQU 00111000B ; MASK F C FDCSEC EQU 16H ; FDC SECTOR PORT 1218 0017 C FDCDAT EQU 17H ; FDC DATA PORT 1219 C 1220 C ; FLOPPY DRIVE SELECT LATCH 1221  C 1231 0010 C DMA EQU 10H ; DMA PORT ADDRESS 1232 C 1233 C ; FDC STATUS BITS 1234 C 1235 0000 E PROTECTED 1242 0007 C FDCRDY EQU 7 ; FDC DISK NOT READY BIT 1243 C 1244 C ; FDC STATUS BYTE MASKS 1245 C 1246 00DC -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-31 802FEQU.MAC--EQUATES MODULE 1253 0014 C SEECMD EQU 00010100B ; SEEK TRACK COMMAND 1254 0034 C HDSCMD EQU 00110100B ; HEAD STEP, PREVIOUS DIRECTION  C WTTCMD EQU 11110000B ; WRITE TRACK 1262 00D0 C FRCCMD EQU 11010000B ; FORCE TERMINATION 1263 C 1264 C ; ASCII EQUATES 1265 C OR READY, PAPER OUT, FAULT 1210 0008 C PIOERR EQU 00001000B ; ERROR STATE MASK 1211 0005 C PRTBSY EQU 05H ; PRINTER BUSY IS BIT #5 IN STATUS BYTE 1212 C 1213  C 1222 0018 C FDD EQU 18H ; DRIVE SELECT LATCH 1223 C 1224 C ; SYSTEM PROM SWITCH ADDRESS 1225 C 1226 0004  C FDCBSY EQU 0 ; FDC BUSY IS BIT 0 1236 0001 C FDCIND EQU 1 ; FDC INDEX HOLE DETECTED 1237 0002 C FDCTR0 EQU 2 ; FDC TRACK 0 DETECTED 1238 0003 C FDCCRC EQU 3  C ERRMSK EQU 11011100B ; MASK OFF INSIGNIFICANT BITS 1247 0098 C SEEMSK EQU 10011000B ; CHECK THE NOT READY BIT 1248 0080 C DNRMSK EQU 10000000B ; DRIVE NOT READY MASK 1249  1255 0054 C HSICMD EQU 01010100B ; HEAD STEP IN, TOWARD HUB. 1256 0074 C HSOCMD EQU 01110100B ; HEAD STEP OUT, TOWARD EDGE. 1257 0080 C RDSCMD EQU 10000000B ; READ SECTOR 12 1266 0003 C ASCETX EQU 03H ; ASCII END OF TRANSMISSION 1267 0006 C ASCACK EQU 06H ; ASCII ACKNOWLEDGEMENT 1268 000A C ASCLF EQU 0AH ; ASCII LINE FEED 1269 000D  C ; FDC EQUATES 1214 C 1215 0014 C FDCCMD EQU 14H ; FDC STATUS AND COMMAND PORT 1216 0015 C FDCTRK EQU 15H ; FDC TRACK PORT 1217 0016  C PROMSW EQU 04H ; SYSTEM PROM DISABLE ADDRESS 1227 0004 C DEFDSK EQU 04H ; DEFAULT DRIVE NUMBER 1228 C 1229 C ; DMA PORT ADDRESS 1230  ; FDC CRC ERROR ENCOUNTERED 1239 0004 C FDCSEE EQU 4 ; FDC SEEK ERROR ENCOUNTERED 1240 0005 C FDCHLD EQU 5 ; FDC HEAD LOAD ACK. 1241 0006 C FDCPRT EQU 6 ; FDC DISK IS WRIT C 1250 C ; FDC COMMAND BYTES 1251 C 1252 0000 C RESCMD EQU 00000000B ; HOME HEAD COMMAND, NO VERIFY 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS 58 00A0 C WTSCMD EQU 10100000B ; WRITE SECTOR 1259 00C0 C RDACMD EQU 11000000B ; READ SECTOR ADDRESS 1260 00E0 C RDTCMD EQU 11100000B ; READ TRACK 1261 00F0  C ASCCR EQU 0DH ; ASCII CARRIAGE RETURN 1270 C 1271 C ; CP/M EQUATES 1272 C 1273 0080 C CPMBUF EQU 80H ; DEFAUL   T CP/M DMA ADDRESS 1274 0003 C IOBYTE EQU 0003H 1275 0004 C LOGDRV EQU 0004H ; CURRENTLY LOGGED DRIVE ADDRESS 1276 00C3 C JP EQU 0C3H ; JUMP OPCODE. 1277 0080  1285 0020 C BPDE EQU 32 ; BYTES/DIRECTORY ENTRY 1286 C 1287 C ; DRIVE 0 EQUATES 1288 C 1289 0002 C OF0 EQU SPT0*TPD0 ; NUMBER OF SECTORS/DISK 1296 0040 C EPD0 EQU 64 ; NUMBER OF DIRECTORY ENTRIES 1297 0800 C BLS0 EQU 2048 ; BLOCK SIZE 1298 0004 C BSH0 EQU 4 ; BLOCK SHIFT 0B ; DIRECTORY BLOCK BIT MAP LOW 1304 0000 C ALH0 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH 1305 0010 C CKS0 EQU (DRM0+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR 1306 C 1307  C SPT1 EQU ((BPS1/128)*PSPT1)*NSIDE1 ; NUMBER OF CP/M SECTORS/TRACK 1315 0B40 C SPD1 EQU SPT1*TPD1 ; NUMBER OF SECTORS/DISK 1316 0040 C EPD1 EQU 64 ; NUMBER OF DIRECTORY ENTRIES 0B ; DIRECTORY BLOCK BIT MAP LOW 1324 0000 C ALH1 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH 1325 0010 C CKS1 EQU (DRM1+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR 1326 C 1327  C RECLEN EQU 128 ; NO. OF BYTES IN CP/M RECORD (SECTOR). 1278 1600 C BDOSLN EQU 1600H ; LENGTH OF BDOS, IN BYTES. 1279 0800 C CCPLEN EQU 800H ; LENGTH OF CCP, IN BYTES 1280 F0 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. 1290 0028 C TPD0 EQU 40 ; NUMBER OF TRACKS/DISK 1291 0100 C BPS0 EQU 256 ; NUMBER OF BYTES/SECTOR 1292 0002 C NSIDE0 EQU 2FACTOR 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-32 802FEQU.MAC--EQUATES MODULE 1299 000F C BLM0 EQU (BLS0/128)-1 ; BLOCK MASK 1300 0000 C EXM0 EQ C ; DRIVE 1 EQUATES 1308 C 1309 0002 C OFF1 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. 1310 0028 C TPD1 EQU 40 ; NUMBER OF TRACKS/DISK 1317 0800 C BLS1 EQU 2048 ; BLOCK SIZE 1318 0004 C BSH1 EQU 4 ; BLOCK SHIFT FACTOR 1319 000F C BLM1 EQU (BLS1/128)-1 ; BLOCK MASK 1320 0000 C EXM1  C ; CP/M HOST DISK CONSTANTS 1328 C 1329 0800 C BLKSIZ EQU BLS0 ; CP/M ALLOCATION BLOCK SIZE 1330 0100 C HSTSIZ EQU BPS0 ; SYSTEM DISK SEC C 1281 C ; DISK PARAMETER BLOCKS. 1282 C ; FIRST COME THE EQUATES 1283 C ; FOR DISK PARAMETER BLOCKS 1284 C  ; NUMBER OF SIDE/DISK 1293 0012 C PSPT0 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK 1294 0048 C SPT0 EQU ((BPS0/128)*PSPT0)*NSIDE0 ;NUMBER OF CP/M SECTOR/TRACK 1295 0B40 C SPDU 0 ; EXTENT MASK 1301 00AA C DSM0 EQU ((SPD0-(SPT0*OFF0))/(BLM0+1))-1 ;CP/M BLOCK PER DISK 1302 003F C DRM0 EQU EPD0-1 ; DIRECTORY ENTRIES - 1 1303 0080 C ALL0 EQU 1000000 1311 0100 C BPS1 EQU 256 ; NUMBER OF BYTES/SECTOR 1312 0002 C NSIDE1 EQU 2 ; NUMBER OF DISK SIDE 1313 0012 C PSPT1 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK 1314 0048 EQU 0 ; EXTENT MASK 1321 00AA C DSM1 EQU ((SPD1-(SPT1*OFF1))/(BLM0+1))-1 ; CP/M BLOCK PER DISK 1322 003F C DRM1 EQU EPD1-1 ; DIRECTORY ENTRIES-1 1323 0080 C ALL1 EQU 1000000TOR SIZE 1331 0024 C HSTSPT EQU PSPT0*NSIDE0 ; SYSTEM DISK SECTOR PER TRACK 1332 0002 C HSTBLK EQU HSTSIZ/128 ; CP/M SECTORS/HOST BUFFER 1333 0048 C CPMSPT EQU HSTBLK*HSTSPT ;    CP/M SECTOR PER TRACK 1334 0001 C SECMSK EQU HSTBLK-1 ; SECTOR MASK 1335 0001 C MAXDRV EQU 1 ; MAXIMUM DRIVE NO. 1336 0002 C NODRVS EQU MAXDRV+1 ; NO. OF DRIVES IN SYSTEM  1344 C INCLUDE 802FDATA.MAC 1345 C 1346 C ; DATA STORAGE 1347 C 1348 C  F784 00FF C DEFW 0FFH ; DISK BUFFER - 1 1357 F786 3C C DEFB 00111100B ; PORT A IS FIXED 1358 F787 10 C DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS 1359 F788 CD C  1366 C 1367 F790 10 C WTSTAB: DEFB DMA ; PORT ADDRESS 1368 F791 0F C DEFB 15 ; TABLE COUNT 1369 F792 C3 C DEFB 11000011B ; RESET THE DMA 1370 F ; ADDRESS OF DISK BUFFER 1377 F79C 8A C DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK 1378 F79D CF C DEFB 11001111B ; LOAD REGISTERS 1379 F79E 01 C DEFB 00000001B ; B -> A, TRIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-34 802FDATA.MAC--DATA DEFINITION MODULE 1388 F7A2 08 C DEFB 8 ; TABLE SIZE 1389 F7A3 18 C DEFB 00011000B ; CHANNEL1337 000A C NOTRYS EQU 10 ; NO. OF RETRIES ON SEEK, READ, WRITE. 1338 C 1339 C ; END OF 802FEQU.MAC 1340 1341  ; DMA INITIALIZATION TABLES FOR READ 1349 C ; AND WRITE OPERATIONS 1350 C 1351 F77F 10 C RDSTAB: DEFB DMA ; PORT ADDRESS 1352 F780 0F C  DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS 1360 F789 F991 C DEFW HSTBUF ; ADDRESS OF DISK BUFFER 1361 F78B 8A C DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK 1362 F78C CF C F793 6D C DEFB 01101101B ; PORT ADDRESS FOLLOWS 1371 F794 17 C DEFB FDCDAT ; FDC DATA PORT ADDRESS 1372 F795 00FF C DEFW 0FFH ; DISK BUFFER - 1 1373 F797 3C C ANSFER MODE 1380 F79F CF C DEFB 11001111B ; LOAD REGISTERS 1381 F7A0 87 C DEFB 10000111B ; ARM THE DMA 1382 C 1383 C ; SIO INITIALIZATION TAB RESET 1390 F7A4 18 C DEFB 00011000B ; ANOTHER ONE 1391 F7A5 14 C DEFB 00010100B ; EXTERNAL STATUS RESET, POINT TO WR4 1392 F7A6 4C C DEFB 01001100B ; X16 CLOCK, 2 STOP BITS 1393  SUBTTL 802FDATA.MAC--DATA DEFINITION MODULE 1342 PAGE 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-33 802FDATA.MAC--DATA DEFINITION MODULE 1343 DEFB 15 ; TABLE COUNT 1353 F781 C3 C DEFB 11000011B ; RESET THE DMA 1354 F782 6D C DEFB 01101101B ; PORT ADDRESS FOLLOWS 1355 F783 17 C DEFB FDCDAT ; FDC DATA PORT ADDRESS 1356 DEFB 11001111B ; LOAD REGISTERS 1363 F78D 05 C DEFB 00000101B ; A -> B, TRANSFER MODE 1364 F78E CF C DEFB 11001111B ; LOAD REGISTERS 1365 F78F 87 C DEFB 10000111B ; ARM THE DMA DEFB 00111100B ; PORT A IS FIXED 1374 F798 10 C DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS 1375 F799 CD C DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS 1376 F79A F991 C DEFW HSTBULE FOR 1384 C ; SERIAL PRINTER, 9600 BAUD, 1385 C ; ETX/ACK PROTOCOL. 1386 C 1387 F7A1 23 C SIOTAB: DEFB SIOBC1 ; PORT ADDRESS 802FB F7A7 03 C DEFB 00000011B ; POINT TO WR3 1394 F7A8 C1 C DEFB 11000001B ; 8 BITS RX, RX ENABLE 1395 F7A9 05 C DEFB 00000101B ; POINT TO WR5 1396 F7AA EA C DEFB    11101010B ; DTR, 8 BITS TX, RTS, TX ENABLE 1397 C 1398 C ; CTC IS BAUD GENERATOR FOR 1399 C ; SIO. 1400 C 1401 F7AB 09  DEFB 0AH 1410 F7B1 54 45 4C 45 C DEFB 'TELEVIDEO SYSTEM TS-802 V2.0' 1411 F7B5 56 49 44 45 C 1412 F7B9 4F 20 53 59 C 1413 F7BD 53 54 45 4D C 1414 F7C1 20 54 53 2D C 141500 C DEFB 0 ; TERMINATION 1427 C 1428 F7E3 0D C BOOMSG: DEFB 0DH 1429 F7E4 0A C DEFB 0AH 1430 F7E5 42 6F 6F 74 C DEFM 'Boot Error.' ; ERROR C 1439 F7F3 0D C ERRMSG: DEFB 0DH 1440 F7F4 0A C DEFB 0AH 1441 F7F5 C VCMD: DEFS 5 ; COMMAND 1442 F7FA 20 45 52 52 C DEFB ' ERROR: SIDE# ' 1443 F7 1454 F81E C VSEC: DEFS 2 ; SECTOR NUMBER 1455 F820 2C 20 46 44 C DEFB ', FDC STATUS ' 1456 F824 43 20 53 54 C 1457 F828 41 54 55 53 C 1458 F82C 20 C 145F83B 0A C DEFB 0AH 1470 F83C 43 68 65 63 C DEFM 'Check the disk in drive "' 1471 F840 6B 20 74 68 C 1472 F844 65 20 64 69 C 1473 F848 73 6B 20 69 C 1474 F84C 6E 20  C CTCTAB: DEFB CTC1 ; PORT ADDRESS FOR CTC 1402 F7AC 02 C DEFB 2 ; TABLE SIZE 1403 F7AD 47 C DEFB 01000111B ; COUNTER MODE, VALUE FOLLOWS 1404 F7AE 04 C DEFB 4 ; F7C5 38 30 32 20 C 1416 F7C9 56 32 2E 30 C 1417 F7CD 0D C DEFB 0DH 1418 F7CE 0A C DEFB 0AH 1419 F7CF 36 32 6B 20 C DEFM '62k CP/M vers 2.2' 1420 F7D3 43 ON WARM BOOT 1431 F7E9 20 45 72 72 C 1432 F7ED 6F 72 2E C 1433 F7F0 0D C DEFB 0DH 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-35 802FDATA.MAC--FE 4F 52 3A 20 C 1444 F802 53 49 44 45 C 1445 F806 23 20 C 1446 F808 C VSIDE: DEFS 1 ; SIDE 1447 F809 2C 20 54 52 C DEFB ', TRACK# ' 1448 F80D 41 43 4B 23 9 F82D C VSTAT: DEFS 2 ; ERROR STATUS 1460 F82F 00 C DEFB 0 1461 F830 52 45 41 44 C RMSG: DEFB 'READ ' 1462 F834 20 C 1463 F835 57 52 49 54 C WMSG: DE64 72 C 1475 F850 69 76 65 20 C 1476 F854 22 C 1477 F855 C VDRIVE: DEFS 1 1478 F856 22 2C 20 61 C DEFM '", and close the door.' 1479 F85A 6E 64 20 63 C  COUNTDOWN FOR 9600 BAUD 1405 C 1406 C ; MESSAGES, MESSAGES 1407 C 1408 F7AF 0D C SIGNON: DEFB 0DH 1409 F7B0 0A C  50 2F 4D C 1421 F7D7 20 76 65 72 C 1422 F7DB 73 20 32 2E C 1423 F7DF 32 C 1424 F7E0 0D C DEFB 0DH 1425 F7E1 0A C DEFB 0AH 1426 F7E2 DATA DEFINITION MODULE 1434 F7F1 0A C DEFB 0AH 1435 F7F2 00 C DEFB 0 1436 C 1437 C ; DETAILED ERROR MESSAGE TABLE 1438  C 1449 F811 20 C 1450 F812 C VTRK: DEFS 2 ; TRACK NUMBER 1451 F814 2C 20 53 45 C DEFB ', SECTOR# ' 1452 F818 43 54 4F 52 C 1453 F81C 23 20 C FB 'WRITE' 1464 F839 45 C 1465 C 1466 C ; DOOR MESSAGE TABLE 1467 C 1468 F83A 0D C RDYMSG: DEFB 0DH 1469  802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-36 802FDATA.MAC--DATA DEFINITION MODULE 1480 F85E 6C 6F 73 65 C 1481 F862 20 74 68 65 C 1482 F866 20 64 6F 6F C    1483 F86A 72 2E C 1484 F86C 0D C DEFB 0DH 1485 F86D 0A C DEFB 0AH 1486 F86E 00 C DEFB 0 1487 C 1488  DEFS 1 ; TARGET SECTOR 1497 F878 01 C MOTFLG: DEFB 1 ; MOTOR ON-OFF FLAG 1498 C 1499 C ; HERE ARE THE VERSION 2 DISK PARAMETER TABLES 1500  C DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK 1510 F883 F899 C DEFW DPRMB0 ; ADDR. OF DISK PARAMETER BLOCK 0 1511 F885 F93F C DEFW CHKSV0 ; ADDR. OF CHECK SCRATCHPAD 1512 F887 F929 0 C DEFW 0 1521 F891 F8A9 C DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK 1522 F893 F899 C DEFW DPRMB1 ; ADDR. OF DISK PARAMETER BLOCK 1 1523 F895 F965 C DEFW CHKSV1 F899 C DPRMB1: 1531 F899 0048 C DEFW SPT0 ; NO. OF SECTOR PER TRACK 1532 F89B 04 C DEFB BSH0 ; BLOCK SHIFT FACTOR 1533 F89C 0F C DEFB BLM0 ; BLOCK MASK 1 C DEFW OFF0 ; NO. OF TRACKS RESERVED FOR SYSTEM 1541 C 1542 C ; MISCELLANEOUS INITIALIZED STORAGE 1543 C 1544 F8A8 80 C U C ; TEMPORARY STORAGES FOR REGISTERS 1489 C 1490 F86F 0000 C TEMPBC: DEFW 0 1491 F871 0000 C TEMPDE: DEFW 0 1492 F873 0000 C TEMPHL: DEFW 0 14 C 1501 F879 C DPBASE: 1502 C 1503 C ; DRIVE 0 DISK PARAMETER HEADER 1504 C 1505 F879 0000 C HEAD0: DE C DEFW ALOCV0 ; ADDR. OF DISK ALLOCATION SCRATCHPAD 1513 C 1514 C 1515 C ; DRIVE 1 DISK PARAMETER HEADER 1516 C  ; ADDR. OF CHECK SCRATCHPAD 1524 F897 F94F C DEFW ALOCV1 ; ADDR. OF DISK ALLOCATION SCRATCHPAD 1525 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-534 F89D 00 C DEFB EXM0 ; EXTENT MASK 1535 F89E 00AA C DEFW DSM0 ; DETERMINES TOTAL STORAGE CAPACITY 1536 F8A0 003F C DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES 1537 F8A2 L1SIZ: DEFB 80H ; SIZE OF SERIAL PRINTER BUFFER 1545 C 1546 C ; UNALLOCATED STORAGE AREAS 1547 C 1548 F8A9 C DIRBUF: DEFS 128 ;93 C 1494 F875 00 C JMPSW: DEFB 0 ; FLAG FOR DOOR MESSAGE PRINT 1495 F876 C DRIVE: DEFS 1 ; STORAGE FOR SAVING CURRENT DRIVE NO 1496 F877 C TSEC:FW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 0 1506 F87B 0000 C DEFW 0 ; BDOS SCRATCH WORDS 1507 F87D 0000 C DEFW 0 ; THREE OF THEM 1508 F87F 0000 C DEFW 0 1509 F881 F8A9  1517 F889 0000 C HEAD1: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 1 1518 F88B 0000 C DEFW 0 ; BDOS SCRATCH WORDS 1519 F88D 0000 C DEFW 0 ; THREE OF THEM 1520 F88F 00037 802FDATA.MAC--DATA DEFINITION MODULE 1526 C 1527 C ; HERE ARE THE DISK PARAMETER BLOCKS 1528 C 1529 F899 C DPRMB0: 1530 80 C DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY 1538 F8A3 00 C DEFB ALH0 ; HIGH ORDER BYTE OF ABOVE 1539 F8A4 0010 C DEFW CKS0 ; SIZE OF DIRECTORY CHECK VECTOR 1540 F8A6 0002  DIRECTORY BUFFER 1549 C 1550 C ; DRIVE 0 STORAGE AREA 1551 C 1552 F929 C ALOCV0: DEFS (DSM0/8)+1 ; ALLOCATION VECTOR STORAGE 155   3 F93F C CHKSV0: DEFS CKS0 ; CHECK VECTOR STORAGE 1554 C 1555 C ; DRIVE 1 STORAGE AREA 1556 C 1557 F94F C UNT 1565 F978 C BOOTRY: DEFS 1 ; BOOT RETRY COUNT 1566 F979 C UNMSTA: DEFS 1 ; UNMASKED VERSION OF ABOVE 1567 F97A C DMATAB: DEFS 2 ; DMA INITIALIZE PARAMETER POINTER 156 C 1575 F97F C HSTDSK: DEFS 1 ; HOST DISK NUMBER 1576 F980 C HSTTRK: DEFS 1 ; HOST TRACK NUMBER 1577 F981 C HSTSEC: DEFS 1 ; HOST SECTOR NUMB C UNATRK: DEFS 1 ; UNALLOCATED TRACK 1586 F988 C UNASEC: DEFS 1 ; UNALOCATED SECTOR 1587 C 1588 F989 C ERFLAG: DEFS 1 ; ERROR REPORTING 1589 F98A L1CNT: DEFS 1 ; SERIAL PRINTER BUFFER COUNT 1596 C 1597 C ; END OF 802FDATA.MAC 1598 1599 .DEPHASE 1600 0004 BSH1 0004 CCPLEN 0800 CHKSV0 F93F CHKSV1 F965 CKS0 0010 CKS1 0010 COMAND F975 CONIN F325 CONOUT F34F CONST F2FF CONT10 F741 CPMBAS DC00 CPMBUF 0080 CPMSPT 0048 CRT10 F349 CRT20 F336 CRTIN F332 CRTOUT F366 CRTST F31C CTC0 0008  ALOCV1: DEFS (DSM1/8)+1 ; ALLOCATION VECTOR STORAGE 1558 F965 C CHKSV1: DEFS CKS1 ; CHECK VECTOR STORAGE 1559 C 1560 C ; DISK I/O COMMAND PARAMETERS 1561 8 C 1569 C ; UNITIALIZED RAM DATA AREAS 1570 C 1571 F97C C SEKDSK: DEFS 1 ; SEEK DISK NUMBER 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802ER 1578 C 1579 F982 C SEKHST: DEFS 1 ; SEEK HOST SECTOR NUMBER 1580 F983 C HSTACT: DEFS 1 ; HOST ACTIVE FLAG 1581 F984 C HSTWRT: DEFS 1 ; H C RSFLAG: DEFS 1 ; PRE-READ SECTOR FLAG 1590 F98B C READOP: DEFS 1 ; 0 IF WRITE OPERATION; 1 IF READ OPER. 1591 F98C C WRTYPE: DEFS 1 ; WRITE OPERATION TYPE 1592 F98D  END 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE S 802FDATA.MAC--DATA DEFINITION MODULE Macros: Symbols: ALH0 0000 ALH1 0000 ALL0 0080 ALL1 0080 ALOCV0 F929 ALOCV1 F94F ASC CTC1 0009 CTC2 000A CTC3 000B CTCTAB F7AB DEFDSK 0004 DIRBUF F8A9 DMA 0010 DMAADR F98D DMATAB F97A DNRMSK 0080 DPBASE F879 DPRMB0 F899 DPRMB1 F899 DRIVE F876 DRM0 003F DRM1 003F DSM0 00AA DSM1 00AA EPD0 0040 EPD1 0040 ERFLAG F989 C 1562 F975 C COMAND: DEFS 1 ; CURRENT COMMAND 1563 F976 C FDDBYT: DEFS 1 ; DRIVE, SIDE, DENSITY, SELECT LATCH 1564 F977 C RETRY: DEFS 1 ; RETRY CO CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-38 802FDATA.MAC--DATA DEFINITION MODULE 1572 F97D C SEKTRK: DEFS 1 ; SEEK TRACK NUMBER 1573 F97E C SEKSEC: DEFS 1 ; SEEK SECTOR NUMBER 1574OST BUFFER WRITE PENDING FLAG 1582 C 1583 F985 C UNACNT: DEFS 1 ; UNALLOATED SECTOR COUNT 1584 F986 C UNADSK: DEFS 1 ; UNALLOCATED DISK 1585 F987  C DMAADR: DEFS 2 ; LAST DMA ADDRESS 1593 F98F C TRKTAB: DEFS NODRVS ; CURRENT TRACK TABLE 1594 F991 C HSTBUF: DEFS HSTSIZ ; HOST DISK I/O BUFFER AREA. 1595 FA91 C UACK 0006 ASCCR 000D ASCETX 0003 ASCLF 000A BATIN F418 BATOUT F418 BATST F41B BDOS E406 BDOSLN 1600 BIOS F200 BLKSIZ 0800 BLM0 000F BLM1 000F BLS0 0800 BLS1 0800 BOOMSG F7E3 BOOT F264 BOOTRY F978 BPDE 0020 BPS0 0100 BPS1 0100 BSH0  ERR10 F729 ERRMSG F7F3 ERRMSK 00DC ERRPRT F71A EXM0 0000 EXM1 0000 FDCBSY 0000 FDCCMD 0014 FDCCRC 0003 FDCDAT 0017 FDCHLD 0005 FDCIND 0001 FDCPRT 0006 FDCRDY 0007 FDCSEC 0016 FDCSEE 0004 FDCTR0 0002 FDCTRK 0015 FDD 0018 FDDBYT F97   6 FRCCMD 00D0 FTAB F763 G10 F77C GHEX F773 GOCPM F2D4 HDSCMD 0034 HDWINI F6F5 HEAD0 F879 HEAD1 F889 HOME F41D HOMED F426 HSICMD 0054 HSOCMD 0074 HSTACT F983 HSTBLK 0002 HSTBUF F991 HSTDSK F97F HSTSEC F981 HSTSIZ 0100 HSTSPT 0024 HMD 00C0 RDMA10 F6DC RDSCMD 0080 RDSTAB F77F RDTCMD 00E0 RDWT10 F4FC RDWT20 F506 RDWT30 F522 RDWT40 F526 RDWT50 F549 RDWT60 F557 RDWTCM F4CC RDYMSG F83A READ F453 READER F370 READHS F55F READOP F98B RECLEN 0080 RESCMD 0000 RESD10 F6B46 SETTRK F441 SIGMSG F64E SIGNON F7AF SIOAC0 000E SIOAC1 0022 SIOAD0 000C SIOAD1 0020 SIOBC0 000F SIOBC1 0023 SIOBD0 000D SIOBD1 0021 SIOTAB F7A1 SPD0 0B40 SPD1 0B40 SPT0 0048 SPT1 0048 STROBE 0000 TEMPBC F86F TEMPDE F871 TEMPHL F WAIT F5DB WAIT10 F5DD WAIT20 F5F3 WAIT30 F623 WAIT40 F60A WAIT50 F617 WBOO10 F28C WBOO20 F29C WBOO30 F2C2 WBOO40 F2CC WBOOT F280 WMSG F835 WRALL 0000 WRDIR 0001 WRIT10 F48A WRIT20 F4BE WRIT30 F4C4 WRITE F467 WRITEH F566 WRMSG F726 BOOMSG 152 1428# BOOT 59 101# BOOTRY 120 149 1565# BPDE 1285# BPS0 1291# 1294 1330 BPS1 1311# 1314 BSH0 1298# 1532 BSH1 1318# CCPLEN 50 1279# CHKSV0 1511 1553# CHKSV1 1523 1558# CKS0 1305# 1539 1553 CKS1 1325# DMAADR 547 726 1592# DMATAB 772 785 1567# DNRMSK 1248# DPBASE 527 1501# DPRMB0 1510 1529# DPRMB1 1522 1530# DRIVE 107 775 992 1495# DRM0 1302# 1305 1536 DRM1 1322# 1325 DSM0 1301# 1535 1552 DSM1 1321# 1557 EPD0STTRK F980 HSTWRT F984 IOBYTE 0003 IODI10 F70B IODI20 F70E IODISP F6FF JMPSW F875 JP 00C3 LIST F388 LISTST F3ED LOGDRV 0004 LPTLSS F3F9 LPTLST F394 LPTS10 F402 MAXDRV 0001 MOTFLG F878 NODRVS 0002 NOTRYS 000A NSIDE0 0002 NSIDE1 0002 3 RESDMA F6D9 RESDSK F6AA RESTOR F6C5 RETRY F977 REV F263 RMSG F830 RSFLAG F98A RWHS10 F583 RWHS20 F59D RWHS30 F5B3 RWHSEC F56B SECMSK 0001 SECTRN F450 SEECMD 0014 SEEK F5BB 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 873 TPD0 0028 TPD1 0028 TRKTAB F98F TRXRDY 0002 TSEC F877 TTYIN F331 TTYOUT F35B TTYS1 F319 TTYST F30B UC1IN F418 UC1OUT F418 UC1ST F41B UL1CNT FA91 UL1L10 F3B4 UL1L20 F3C2 UL1L30 F3C6 UL1L40 F3D2 UL1L50 F3D8 UL1L60 F3E4 UL1L70 F3E WRTYPE F98C WRUAL 0002 WTSCMD 00A0 WTSTAB F790 WTTCMD 00F0 No Fatal error(s) ALH0 1304# 1538 ALH1 1324# ALL0 1303# 1537 ALL1 1323# ALOCV0 1512 1552# ALOCV1 1524 1557# ASCACK 371 1267# ASCCR 1269# ASCETX 380  1558 COMAND 771 789 1103 1562# CONIN 62 239# 897 CONOUT 63 276# CONST 61 201# 894 CONT10 1117 1119# CPMBAS 49# 50 130 187 CPMBUF 102 118 172 1273# CPMSPT 627 1333# CRT10 259 268# CRT20 258#  1296# 1302 EPD1 1316# 1322 ERFLAG 653 747 793 800 813 868 887 1126 1588# ERR10 1107 1109# ERRMSG 1128 1439# ERRMSK 886 1246# ERRPRT 812 1103# EXM0 1300# 1534 EXM1 1320# FDCBSY 882 1235# FDCCMD 790 841 86 OFF0 0002 OFF1 0002 ONE F73F PIOAC 001E PIOAD 001C PIOBC 001F PIOBD 001D PIOERR 0008 PIOMSK 0038 PROMSW 0004 PRTBSY 0005 PRTENT F6F0 PRTINI F6EE PRTMSG F6E4 PSPT0 0012 PSPT1 0012 PTPPUN F418 PTRRDR F418 PUNCH F37C RCVRDY 0000 RDAC MACRO-80 3.36 17-Mar-80 PAGE S-1 802FDATA.MAC--DATA DEFINITION MODULE SEEMSK 0098 SEKDSK F97C SEKHST F982 SEKSEC F97E SEKTRK F97D SELD10 F696 SELD20 F69E SELDRV F693 SELDSK F42B SELS10 F673 SELS20 F68D SELSID F662 SETDMA F44B SETSEC F4A UL1LSS F404 UL1LST F3A9 UL1SIZ F8A8 UNACNT F985 UNADSK F986 UNASEC F988 UNATRK F987 UNMSTA F979 UNUSED F417 UP1PUN F418 UP2PUN F418 UR1RDR F418 UR2RDR F418 VCMD F7F5 VDRIVE F855 VER F262 VSEC F81E VSIDE F808 VSTAT F82D VTRK F812 1266# ASCLF 1268# BATIN 243 465# BATOUT 280 468# BATST 205 484# BDOS 50# 179 BDOSLN 49 132 1278# BIOS 59# 176 BLKSIZ 585 1329# BLM0 1299# 1301 1321 1533 BLM1 1319# BLS0 1297# 1299 1329 BLS1 1317# 1319 263 267 CRTIN 242 256# CRTOUT 279 297# 299 333 1037 CRTST 204 228# 258 413 CTC0 1189# CTC1 1190# 1401 CTC2 1191# CTC3 1192# CTCTAB 1401# DEFDSK 911 1227# DIRBUF 1509 1521 1548# DMA 1022 1231# 1351 1367 7 907 908 1013 1215# FDCCRC 1238# FDCDAT 839 1218# 1355 1371 FDCHLD 1240# FDCIND 1236# FDCPRT 1241# FDCRDY 801 869 1242# FDCSEC 942 1217# FDCSEE 1239# FDCTR0 1237# FDCTRK 833 1216# FDD 265 946 976 987 1222#    FDDBYT 932 945 972 975 986 1113 1563# FRCCMD 906 1262# FTAB 1121 1124 1127 1134# G10 1151 1154# GHEX 1139 1143 1149# GOCPM 112 172# HDSCMD 1254# HDWINI 111 1059# HEAD0 1505# HEAD1 1517# HOME 67 498# HOME 918 1494# JP 174 1276# LIST 64 330# LISTST 74 410# LOGDRV 108 185 1275# LPTLSS 340 414 424# LPTLST 334 340# 341 LPTS10 436# MAXDRV 516 988 1335# 1336 MOTFLG 266 947 951 1497# NODRVS 1336# 1593 NOT29 367 449 1203# RDACMD 1259# RDMA10 1021# 1023 RDSCMD 763 1257# RDSTAB 764 1351# RDTCMD 1260# RDWT10 672 679 690# RDWT20 665 692 698# RDWT30 706 710# RDWT40 686 715# RDWT50 730 740# RDWT60 746 753# RD 75 555# SEECMD 840 1253# SEEK 787 827# SEEMSK 846 1247# SEKDSK 515 587 604 669 698 1571# SEKHST 657 683 702 1579# SEKSEC 542 591 618 654 715 1573# SEKTRK 505 535 589 611 676 700 1572# SELD10  SPD0 1295# 1301 SPD1 1315# 1321 SPT0 159 1294# 1295 1301 1531 SPT1 1314# 1315 1321 STROBE 345 348 1208# TEMPBC 860 891 904 1490# TEMPDE 861 890 903 1491# TEMPHL 862 889 902 1492# TPD0 1290# 1295 TPD1 1310358# UL1SIZ 358 443 1544# UNACNT 183 564 586 596 603 646 1583# UNADSK 588 605 1584# UNASEC 592 619 1586# UNATRK 590 612 633 635 1585# UNMSTA 885 1566# UNUSED 76 77 78 79 80 460# UP1PUN 3D 500 504# HSICMD 1255# HSOCMD 1256# HSTACT 122 184 502 661 1580# HSTBLK 1332# 1333 1334 HSTBUF 724 1360 1376 1594# HSTDSK 670 699 774 828 919 991 1006 1575# HSTSEC 684 703 935 1577# HSTSIZ 1330# 1332 RYS 119 1337# NSIDE0 1292# 1294 1331 NSIDE1 1312# 1314 OFF0 1289# 1301 1540 OFF1 1309# 1321 ONE 1115 1118# PIOAC 1197# PIOAD 344 346 347 349 424 1196# PIOBC 1199# PIOBD 343 1198# PIOERR 1210# PIOMSK 1209# PROMSWWTCM 570 641 652# RDYMSG 922 1468# READ 72 144 563# READER 66 307# READHS 707 762# READOP 566 577 728 1590# RECLEN 132 165 1277# RESCMD 1012 1252# RESD10 990# 996 RESDMA 799 909 1019# RESDSK 124 966# 970 SELD20 967 972# SELDRV 777 963# 993 SELDSK 68 129 513# SELS10 937 941# SELS20 953# 956 SELSID 778 932# SETDMA 71 139 173 547# SETSEC 70 143 541# SETTRK 69 141 534# SIGMSG 879 9# 1315 TRKTAB 827 1007 1593# TRXRDY 298 378 390 1204# TSEC 943 1123 1496# TTYIN 241 248# 309 TTYOUT 278 286# 287 321 332 TTYS1 217 221# TTYST 203 212# 286 412 UC1IN 244 466# UC1OUT 281 469# UC1S23 476# UP2PUN 324 477# UR1RDR 311 472# UR2RDR 312 473# VCMD 1109 1441# VDRIVE 921 1477# VER 95# VSEC 1122 1454# VSIDE 1112 1446# VSTAT 1125 1459# VTRK 1119 1450# WAIT 791 845 856# 1014 WAIT10 857# 858 1594 HSTSPT 1331# 1333 HSTTRK 677 701 835 1120 1576# HSTWRT 498 690 711 735 754 1581# IOBYTE 110 1081 1274# IODI10 1084# 1085 IODI20 1082 1087# IODISP 201 239 276 307 319 330 410 1074# JMPSW 865 873  101 1226# PRTBSY 430 1211# PRTENT 1050# PRTINI 786 1048# 1061 PRTMSG 104 153 923 1032# 1039 1129 PSPT0 936 939 1293# 1294 1331 PSPT1 1313# 1314 PTPPUN 322 475# PTRRDR 310 471# PUNCH 65 319# RCVRDY 2 985# 1059 RESTOR 809 994 1006# RETRY 783 804 1564# REV 96# RMSG 1106 1461# RSFLAG 567 640 648 704 1589# RWHS10 785# 810 RWHS20 788 792 799# RWHS30 808 812# RWHSEC 765 771# SECMSK 716 1334# SECTRN 17# SIGNON 103 1408# SIOAC0 1175# SIOAC1 1183# SIOAD0 1174# SIOAD1 1182# SIOBC0 228 297 1177# SIOBC1 213 214 366 377 389 448 1185# 1387 SIOBD0 268 301 1176# SIOBD1 290 369 381 394 1184# SIOTAB 1060 1387# T 206 485# UL1CNT 182 363 442 1595# UL1L10 366# 387 UL1L20 368 373# UL1L30 377# 379 386 UL1L40 375 384# UL1L50 382 389# 391 400 403 UL1L60 372 397# UL1L70 399 402# UL1LSS 415 442# UL1LST 335 WAIT20 867# 883 WAIT30 875 894# WAIT40 880# 896 899 WAIT50 870 889# WBOO10 124# 151 WBOO20 134# 168 WBOO30 145 156# WBOO40 160 164# WBOOT 60 118# 912 WMSG 1108 1463# WRALL 1167# WRDIR 745 1168# WRI   T10 581 596# WRIT20 628 639# WRIT30 598 607 614 621 645# WRITE 73 576# WRITEH 693 755 767# WRMSG 1105 1108# WRTYPE 569 579 744 1591# WRUAL 568 580 1169# WTSCMD 768 1258# WTSTAB 769 1367# WTTCMD 12F78B 8A C DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK 1359 F78C CF C DEFB 11001111B ; LOAD REGISTERS 1360 F78D 05 C DEFB 00000101B ; A -> B, TRANSFER MODE 1361 F78E CF DDRESS 1369 F795 00FF C DEFW 0FFH ; DISK BUFFER - 1 1370 F797 3C C DEFB 00111100B ; PORT A IS FIXED 1371 F798 10 C DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS 1372 F799 CD # #.(!\<ͮ72x2 y2 \(U!5 \2 : _: OL: Od}OP\2 : _: (ͮ7! 4: 6! 4:_!6 #   ^#VMAKESYS Ver. 2.0 $BootsL STATUS RESET, POINT TO WR4 1389 F7A6 4C C DEFB 01001100B ; X16 CLOCK, 2 STOP BITS 1390 F7A7 03 C DEFB 00000011B ; POINT TO WR3 1391 F7A8 C1 C DEFB 11000001B ; 8 BITS RX, RX ENABLE7 C DEFB 01000111B ; COUNTER MODE, VALUE FOLLOWS 1401 F7AE 04 C DEFB 4 ; COUNTDOWN FOR 9600 BAUD 1402 C 1403 C ; MESSAGES, MESSAGES 1404 61# 867# 883 WAIT30 875 894# WAIT40 880# 896 899 WAIT50 870 889# WBOO10 124# 151 WBOO20 134# 1SG 1105 1108# WRTYPE 569 579 744 1591# WRUAL 568 580 1169# WTSCMD 768 1258# WTSTAB 769 1367# WTTCMD 12 C DEFB 11001111B ; LOAD REGISTERS 1362 F78F 87 C DEFB 10000111B ; ARM THE DMA 1363 C 1364 F790 10 C WTSTAB: DEFB DMA ; PORT ADDRESS 1365 F791 0F  C DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS 1373 F79A F991 C DEFW HSTBUF ; ADDRESS OF DISK BUFFER 1374 F79C 8A C DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK 1375 F79D CF trap Filename(Or RETURN To Skip) $BDOS Filename(Or RETURN To Skip) $BIOS Filename(Or RETURN To Skip) $MAKESYS Completed. $Destination Drive? $Invalid Drive (Try A,B,C or D). $File Not Found.$Unexpected EOF Encountered.$Disk Write Error.$ $COM 1392 F7A9 05 C DEFB 00000101B ; POINT TO WR5 1393 F7AA EA C DEFB 11101010B ; DTR, 8 BITS TX, RTS, TX ENABLE 1394 C 1395 C ; CTC IS BAUD GENE TTYST: LD A,00010000B ; RESET EXTRN/STATUS COMMAND OUT (SIOBC1),A ; SEND OUT IN A,(SIOBC1) ; READ SIO STATUS AND 00100100B ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND? JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION XOR A ; 55 F787 10 C DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS 1356 F788 CD C DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS 1357 F789 F991 C DEFW HSTBUF ; ADDRESS OF DISK BUFFER 1358  C DEFB 15 ; TABLE COUNT 1366 F792 C3 C DEFB 11000011B ; RESET THE DMA 1367 F793 6D C DEFB 01101101B ; PORT ADDRESS FOLLOWS 1368 F794 17 C DEFB FDCDAT ; FDC DATA PORT A0MAKESYS 81182, COPYRIGHT TELEVIDEO SYSTEMS, INC.1$ͮ͠2 : OH2: OHͺ8( >+"ͺ8( >,+Dͺ8( >>.+fͮz͵A802 ͮ͵:!\$6#!] 6 #\!N##~+: ~A8905<## ~.( (.>.:.6. 2. ..*.&."....!.$.' .*.-.0*+++ation Drive? $Invalid Drive (Try A,B,C or D). $File Not Found.$Unexpected EOF Encountered.$Disk Write Error.$ $COMRATOR FOR 1396 C ; SIO. 1397 C 1398 F7AB 09 C CTCTAB: DEFB CTC1 ; PORT ADDRESS FOR CTC 1399 F7AC 02 C DEFB 2 ; TABLE SIZE 1400 F7AD 4NO, SET NOT READY CONDITION RET TTYS1: XOR A DEC A ; A = FF RET 0B ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND? JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION XOR A ;    0A C DEFB 0AH 1416 F7CF 36 32 6B 20 C DEFM '62k CP/M vers 2.2' 1417 F7D3 43 50 2F 4D C 1418 F7D7 20 76 65 72 C 1419 F7DB 73 20 32 2E C 1420 F7DF 32 C DH 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-35 802FDATA.MAC--DATA DEFINITION MODULE 1431 F7F1 0A C DEFB 0AH 1432 F7F2 00 C DEFB 0 1433  ; OUTPUT ROUTINE FOR SERIAL EPSON AND TI PRINTER ; SIO CHANNEL A. TTYOUT: CALL TTYST ; CHECK STATUS OF PRINTER JR Z,TTYOUT ; NOT READY, LOOP BACK LD A,C ; GET CHARACTER IN REG. C AND 7FH ; STRIP OFF PARITY OUT (SIOBD1),A ; SEND OUT RET  C RMSG: DEFB 'READ ' 1459 F834 20 C 1460 F835 57 52 49 54 C WMSG: DEFB 'WRITE' 1461 F839 45 C 1462 C 1463 C ; DOOR MESVE: DEFS 1 1475 F856 22 2C 20 61 C DEFM '", and close the door.' 1476 F85A 6E 64 20 63 C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-36 802FDATA.MAC--DATA DEFINITION MODULEW 0 1488 F871 0000 C TEMPDE: DEFW 0 1489 F873 0000 C TEMPHL: DEFW 0 1490 C 1491 F875 00 C JMPSW: DEFB 0 ; FLAG FOR DOOR MESSAGE PRINT 1492 F876  1421 F7E0 0D C DEFB 0DH 1422 F7E1 0A C DEFB 0AH 1423 F7E2 00 C DEFB 0 ; TERMINATION 1424 C 1425 F7E3 0D C BOOMSG: DEFB 0DH C 1434 C ; DETAILED ERROR MESSAGE TABLE 1435 C 1436 F7F3 0D C ERRMSG: DEFB 0DH 1437 F7F4 0A C DEFB 0AH 1438 F7F5 0 53 45 C DEFB ', SECTOR# ' 1449 F818 43 54 4F 52 C 1450 F81C 23 20 C 1451 F81E C VSEC: DEFS 2 ; SECTOR NUMBER 1452 F820 2C 20 46 44 C DEFB ', FDC STATUS ' 1453 SAGE TABLE 1464 C 1465 F83A 0D C RDYMSG: DEFB 0DH 1466 F83B 0A C DEFB 0AH 1467 F83C 43 68 65 63 C DEFM 'Check the disk in drive "' 1468 F840 6B 20 74 6 1477 F85E 6C 6F 73 65 C 1478 F862 20 74 68 65 C 1479 F866 20 64 6F 6F C 1480 F86A 72 2E C 1481 F86C 0D C DEFB 0DH 1482 F86D 0A C DEFB C DRIVE: DEFS 1 ; STORAGE FOR SAVING CURRENT DRIVE NO 1493 F877 C TSEC: DEFS 1 ; TARGET SECTOR 1494 F878 01 C MOTFLG: DEFB 1 ; MOTOR ON-OFF FLAG 1495 C  1426 F7E4 0A C DEFB 0AH 1427 F7E5 42 6F 6F 74 C DEFM 'Boot Error.' ; ERROR ON WARM BOOT 1428 F7E9 20 45 72 72 C 1429 F7ED 6F 72 2E C 1430 F7F0 0D C DEFB 0 C VCMD: DEFS 5 ; COMMAND 1439 F7FA 20 45 52 52 C DEFB ' ERROR: SIDE# ' 1440 F7FE 4F 52 3A 20 C 1441 F802 53 49 44 45 C 1442 F806 23 20 C 1443 F808 F824 43 20 53 54 C 1454 F828 41 54 55 53 C 1455 F82C 20 C 1456 F82D C VSTAT: DEFS 2 ; ERROR STATUS 1457 F82F 00 C DEFB 0 1458 F830 52 45 41 44 8 C 1469 F844 65 20 64 69 C 1470 F848 73 6B 20 69 C 1471 F84C 6E 20 64 72 C 1472 F850 69 76 65 20 C 1473 F854 22 C 1474 F855 C VDRI 0AH 1483 F86E 00 C DEFB 0 1484 C 1485 C ; TEMPORARY STORAGES FOR REGISTERS 1486 C 1487 F86F 0000 C TEMPBC: DEF 1496 C ; HERE ARE THE VERSION 2 DISK PARAMETER TABLES 1497 C 1498 F879 C DPBASE: 1499 C 1500 C ; DR   IVE 0 DISK PARAMETER HEADER 1501 C 1502 F879 0000 C HEAD0: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 0 1503 F87B 0000 C DEFW 0 ; BDOS SCRATCH WORDS 1504 F87D 000 C 1512 C ; DRIVE 1 DISK PARAMETER HEADER 1513 C 1514 F889 0000 C HEAD1: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 1 1515 F88B 0000 C  C 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-37 802FDATA.MAC--DATA DEFINITION MODULE 1523 C 1524 C ; HERE ARE THE DISCAPACITY 1533 F8A0 003F C DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES 1534 F8A2 80 C DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY 1535 F8A3 00 C DEFB ALH0 ; HIGH ORDER BYTE OF TED STORAGE AREAS 1544 C 1545 F8A9 C DIRBUF: DEFS 128 ; DIRECTORY BUFFER 1546 C 1547 C ; DRIVE 0 STORAGE AREA 1548  C 1557 C ; DISK I/O COMMAND PARAMETERS 1558 C 1559 F975 C COMAND: DEFS 1 ; CURRENT COMMAND 1560 F976 C F0 C DEFW 0 ; THREE OF THEM 1505 F87F 0000 C DEFW 0 1506 F881 F8A9 C DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK 1507 F883 F899 C DEFW DPRMB0 ; ADDR. OF DISK PARAM DEFW 0 ; BDOS SCRATCH WORDS 1516 F88D 0000 C DEFW 0 ; THREE OF THEM 1517 F88F 0000 C DEFW 0 1518 F891 F8A9 C DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK 1519 F893 F899 K PARAMETER BLOCKS 1525 C 1526 F899 C DPRMB0: 1527 F899 C DPRMB1: 1528 F899 0048 C DEFW SPT0 ; NO. OF SECTOR PER TRACK 1529 F89B 04 ABOVE 1536 F8A4 0010 C DEFW CKS0 ; SIZE OF DIRECTORY CHECK VECTOR 1537 F8A6 0002 C DEFW OFF0 ; NO. OF TRACKS RESERVED FOR SYSTEM 1538 C 1539 C  C 1549 F929 C ALOCV0: DEFS (DSM0/8)+1 ; ALLOCATION VECTOR STORAGE 1550 F93F C CHKSV0: DEFS CKS0 ; CHECK VECTOR STORAGE 1551 C 1552 DDBYT: DEFS 1 ; DRIVE, SIDE, DENSITY, SELECT LATCH 1561 F977 C RETRY: DEFS 1 ; RETRY COUNT 1562 F978 C BOOTRY: DEFS 1 ; BOOT RETRY COUNT 1563 F979 C UNMSTA: DEFS 1 ; UNMASETER BLOCK 0 1508 F885 F93F C DEFW CHKSV0 ; ADDR. OF CHECK SCRATCHPAD 1509 F887 F929 C DEFW ALOCV0 ; ADDR. OF DISK ALLOCATION SCRATCHPAD 1510 C 1511  C DEFW DPRMB1 ; ADDR. OF DISK PARAMETER BLOCK 1 1520 F895 F965 C DEFW CHKSV1 ; ADDR. OF CHECK SCRATCHPAD 1521 F897 F94F C DEFW ALOCV1 ; ADDR. OF DISK ALLOCATION SCRATCHPAD 1522  C DEFB BSH0 ; BLOCK SHIFT FACTOR 1530 F89C 0F C DEFB BLM0 ; BLOCK MASK 1531 F89D 00 C DEFB EXM0 ; EXTENT MASK 1532 F89E 00AA C DEFW DSM0 ; DETERMINES TOTAL STORAGE ; MISCELLANEOUS INITIALIZED STORAGE 1540 C 1541 F8A8 80 C UL1SIZ: DEFB 80H ; SIZE OF SERIAL PRINTER BUFFER 1542 C 1543 C ; UNALLOCA C ; DRIVE 1 STORAGE AREA 1553 C 1554 F94F C ALOCV1: DEFS (DSM1/8)+1 ; ALLOCATION VECTOR STORAGE 1555 F965 C CHKSV1: DEFS CKS1 ; CHECK VECTOR STORAGE 1556KED VERSION OF ABOVE 1564 F97A C DMATAB: DEFS 2 ; DMA INITIALIZE PARAMETER POINTER 1565 C 1566 C ; UNITIALIZED RAM DATA AREAS 1567 C     1568 F97C C SEKDSK: DEFS 1 ; SEEK DISK NUMBER 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE 1-38 802FDATA.MAC--DATA DEFINITION MODULE 1569 F97D C SE C HSTACT: DEFS 1 ; HOST ACTIVE FLAG 1578 F984 C HSTWRT: DEFS 1 ; HOST BUFFER WRITE PENDING FLAG 1579 C 1580 F985 C UNACNT: DEFS 1 ; UNALLOATED SEAD OPER. 1588 F98C C WRTYPE: DEFS 1 ; WRITE OPERATION TYPE 1589 F98D C DMAADR: DEFS 2 ; LAST DMA ADDRESS 1590 F98F C TRKTAB: DEFS NODRVS ; CURRENT TRACK TABLE 1591 F991DEFINITION MODULE Macros: Symbols: ALH0 0000 ALH1 0000 ALL0 0080 ALL1 0080 ALOCV0 F929 ALOCV1 F94F ASCACK 0006 ASCCR 000D ASCETX 0003 ASCLF 000A BATIN F418 BATOUT F418 BATST F41B BDOS E406 BDOSLN 1600 BIOS F200 BLKSIZ 0800 BLM0 RMB0 F899 DPRMB1 F899 DRIVE F876 DRM0 003F DRM1 003F DSM0 00AA DSM1 00AA EPD0 0040 EPD1 0040 ERFLAG F989 ERR10 F729 ERRMSG F7F3 ERRMSK 00DC ERRPRT F71A EXM0 0000 EXM1 0000 FDCBSY 0000 FDCCMD 0014 FDCCRC 0003 FDCDAT 0017 FDCHLD 0005TLSS F3F9 LPTLST F394 LPTS10 F402 MAXDRV 0001 MOTFLG F878 NODRVS 0002 NOTRYS 000A NSIDE0 0002 NSIDE1 0002 OFF0 0002 OFF1 0002 ONE F73F PIOAC 001E PIOAD 001C PIOBC 001F PIOBD 001D PIOERR 0008 PIOMSK 0038 PROMSW 0004 PRTBSY 0005 PRTEKTRK: DEFS 1 ; SEEK TRACK NUMBER 1570 F97E C SEKSEC: DEFS 1 ; SEEK SECTOR NUMBER 1571 C 1572 F97F C HSTDSK: DEFS 1 ; HOST DISK NUMBER 1573 F980 CTOR COUNT 1581 F986 C UNADSK: DEFS 1 ; UNALLOCATED DISK 1582 F987 C UNATRK: DEFS 1 ; UNALLOCATED TRACK 1583 F988 C UNASEC: DEFS 1 ; UNALOCATED SECTOR 1584  C HSTBUF: DEFS HSTSIZ ; HOST DISK I/O BUFFER AREA. 1592 FA91 C UL1CNT: DEFS 1 ; SERIAL PRINTER BUFFER COUNT 1593 C 1594 C ; END OF BIOSDAT000F BLM1 000F BLS0 0800 BLS1 0800 BOOMSG F7E3 BOOT F264 BOOTRY F978 BPDE 0020 BPS0 0100 BPS1 0100 BSH0 0004 BSH1 0004 CCPLEN 0800 CHKSV0 F93F CHKSV1 F965 CKS0 0010 CKS1 0010 COMAND F975 CONIN F325 CONOUT F34F CONST F2FF CONT10 F7 FDCIND 0001 FDCPRT 0006 FDCRDY 0007 FDCSEC 0016 FDCSEE 0004 FDCTR0 0002 FDCTRK 0015 FDD 0018 FDDBYT F976 FRCCMD 00D0 FTAB F763 G10 F77C GHEX F773 GOCPM F2D4 HDSCMD 0034 HDWINI F6F5 HEAD0 F879 HEAD1 F889 HOME F41D HOMED F426 HSICNT F6F0 PRTINI F6EE PRTMSG F6E4 PSPT0 0012 PSPT1 0012 PTPPUN F418 PTRRDR F418 PUNCH F37C RCVRDY 0000 RDACMD 00C0 RDMA10 F6DC RDSCMD 0080 RDSTAB F77F RDTCMD 00E0 RDWT10 F4FC RDWT20 F506 RDWT30 F522 RDWT40 F526 RDWT50 F549 RDWT60 F557 C HSTTRK: DEFS 1 ; HOST TRACK NUMBER 1574 F981 C HSTSEC: DEFS 1 ; HOST SECTOR NUMBER 1575 C 1576 F982 C SEKHST: DEFS 1 ; SEEK HOST SECTOR NUMBER 1577 F983  C 1585 F989 C ERFLAG: DEFS 1 ; ERROR REPORTING 1586 F98A C RSFLAG: DEFS 1 ; PRE-READ SECTOR FLAG 1587 F98B C READOP: DEFS 1 ; 0 IF WRITE OPERATION; 1 IF REA.MAC 1595 1596 .DEPHASE 1597 END 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE S 802FDATA.MAC--DATA 41 CPMBAS DC00 CPMBUF 0080 CPMSPT 0048 CRT10 F349 CRT20 F336 CRTIN F332 CRTOUT F366 CRTST F31C CTC0 0008 CTC1 0009 CTC2 000A CTC3 000B CTCTAB F7AB DEFDSK 0004 DIRBUF F8A9 DMA 0010 DMAADR F98D DMATAB F97A DNRMSK 0080 DPBASE F879 DPMD 0054 HSOCMD 0074 HSTACT F983 HSTBLK 0002 HSTBUF F991 HSTDSK F97F HSTSEC F981 HSTSIZ 0100 HSTSPT 0024 HSTTRK F980 HSTWRT F984 IOBYTE 0003 IODI10 F70B IODI20 F70E IODISP F6FF JMPSW F875 JP 00C3 LIST F388 LISTST F3ED LOGDRV 0004 LP RDWTCM F4CC RDYMSG F83A READ F453 READER F370 READHS F55F READOP F98B RECLEN 0080 RESCMD 0000 RESD10 F6B3 RESDMA F6D9 RESDSK F6AA RESTOR F6C5 RETRY F977 REV F263 RMSG F830 RSFLAG F98A RWHS10 F583 RWHS20 F59D RWHS30 F5B3 RWHSEC F56B    SECMSK 0001 SECTRN F450 SEECMD 0014 SEEK F5BB 802FBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 MACRO-80 3.36 17-Mar-80 PAGE S-1 802FDATA.MAC--DATA DEFINITION MODULE SEEMSK 0098 SEKDSK F97C SEKHST F982 SEKSEC F97E SEKTRK F97D  UC1ST F41B UL1CNT FA91 UL1L10 F3B4 UL1L20 F3C2 UL1L30 F3C6 UL1L40 F3D2 UL1L50 F3D8 UL1L60 F3E4 UL1L70 F3EA UL1LSS F404 UL1LST F3A9 UL1SIZ F8A8 UNACNT F985 UNADSK F986 UNASEC F988 UNATRK F987 UNMSTA F979 UNUSED F417 UP1PUN F418 UP2P303# 1534 ALL1 1323# ALOCV0 1509 1549# ALOCV1 1521 1554# ASCACK 371 1267# ASCCR 1269# ASCETX 380 1266# ASCLF 1268# BATIN 243 465# BATOUT 280 468# BATST 205 484# BDOS 50# 179 BDOSLN 49 132 1278# BIOS 59#  49# 50 130 187 CPMBUF 102 118 172 1273# CPMSPT 627 1333# CRT10 259 268# CRT20 258# 263 267 CRTIN 242 256# CRTOUT 279 297# 299 333 1037 CRTST 204 228# 258 413 CTC0 1189# CTC1 1190# 1398 CTCRMSK 886 1246# ERRPRT 812 1103# EXM0 1300# 1531 EXM1 1320# FDCBSY 882 1235# FDCCMD 790 841 867 907 908 1013 1215# FDCCRC 1238# FDCDAT 839 1218# 1352 1368 FDCHLD 1240# FDCIND 1236# FDCPRT 1241# FDCRDY 801 869 91# HSTDSK 670 699 774 828 919 991 1006 1572# HSTSEC 684 703 935 1574# HSTSIZ 1330# 1332 1591 HSTSPT 1331# 1333 HSTTRK 677 701 835 1120 1573# HSTWRT 498 690 711 735 754 1578# IOBYTE 110 1081 1274# IO SELD10 F696 SELD20 F69E SELDRV F693 SELDSK F42B SELS10 F673 SELS20 F68D SELSID F662 SETDMA F44B SETSEC F446 SETTRK F441 SIGMSG F64E SIGNON F7AF SIOAC0 000E SIOAC1 0022 SIOAD0 000C SIOAD1 0020 SIOBC0 000F SIOBC1 0023 SIOBD0 000D SIOUN F418 UR1RDR F418 UR2RDR F418 VCMD F7F5 VDRIVE F855 VER F262 VSEC F81E VSIDE F808 VSTAT F82D VTRK F812 WAIT F5DB WAIT10 F5DD WAIT20 F5F3 WAIT30 F623 WAIT40 F60A WAIT50 F617 WBOO10 F28C WBOO20 F29C WBOO30 F2C2 WBOO40 F2CC WBOOT F2 176 BLKSIZ 585 1329# BLM0 1299# 1301 1321 1530 BLM1 1319# BLS0 1297# 1299 1329 BLS1 1317# 1319 BOOMSG 152 1425# BOOT 59 101# BOOTRY 120 149 1562# BPDE 1285# BPS0 1291# 1294 1330 BPS1 1311# 1314 BSH0 1298# 1522 1191# CTC3 1192# CTCTAB 1398# DEFDSK 911 1227# DIRBUF 1506 1518 1545# DMA 1022 1231# 1348 1364 DMAADR 547 726 1589# DMATAB 772 785 1564# DNRMSK 1248# DPBASE 527 1498# DPRMB0 1507 1526# DPRMB1 1519 1527# DRIVE  1242# FDCSEC 942 1217# FDCSEE 1239# FDCTR0 1237# FDCTRK 833 1216# FDD 265 946 976 987 1222# FDDBYT 932 945 972 975 986 1113 1560# FRCCMD 906 1262# FTAB 1121 1124 1127 1134# G10 1151 1154# GHEX 1139 1143 1DI10 1084# 1085 IODI20 1082 1087# IODISP 201 239 276 307 319 330 410 1074# JMPSW 865 873 918 1491# JP 174 1276# LIST 64 330# LISTST 74 410# LOGDRV 108 185 1275# LPTLSS 340 414 424# LPTLST 334 3BD1 0021 SIOTAB F7A1 SPD0 0B40 SPD1 0B40 SPT0 0048 SPT1 0048 STROBE 0000 TEMPBC F86F TEMPDE F871 TEMPHL F873 TPD0 0028 TPD1 0028 TRKTAB F98F TRXRDY 0002 TSEC F877 TTYIN F331 TTYOUT F35B TTYS1 F319 TTYST F30B UC1IN F418 UC1OUT F418 80 WMSG F835 WRALL 0000 WRDIR 0001 WRIT10 F48A WRIT20 F4BE WRIT30 F4C4 WRITE F467 WRITEH F566 WRMSG F726 WRTYPE F98C WRUAL 0002 WTSCMD 00A0 WTSTAB F790 WTTCMD 00F0 No Fatal error(s) ALH0 1304# 1535 ALH1 1324# ALL0 19 BSH1 1318# CCPLEN 50 1279# CHKSV0 1508 1550# CHKSV1 1520 1555# CKS0 1305# 1536 1550 CKS1 1325# 1555 COMAND 771 789 1103 1559# CONIN 62 239# 897 CONOUT 63 276# CONST 61 201# 894 CONT10 1117 1119# CPMBAS107 775 992 1492# DRM0 1302# 1305 1533 DRM1 1322# 1325 DSM0 1301# 1532 1549 DSM1 1321# 1554 EPD0 1296# 1302 EPD1 1316# 1322 ERFLAG 653 747 793 800 813 868 887 1126 1585# ERR10 1107 1109# ERRMSG 1128 1436# ER149# GOCPM 112 172# HDSCMD 1254# HDWINI 111 1059# HEAD0 1502# HEAD1 1514# HOME 67 498# HOMED 500 504# HSICMD 1255# HSOCMD 1256# HSTACT 122 184 502 661 1577# HSTBLK 1332# 1333 1334 HSTBUF 724 1357 1373 1540# 341 LPTS10 436# MAXDRV 516 988 1335# 1336 MOTFLG 266 947 951 1494# NODRVS 1336# 1590 NOTRYS 119 1337# NSIDE0 1292# 1294 1331 NSIDE1 1312# 1314 OFF0 1289# 1301 1537 OFF1 1309# 1321 ONE 1115 1118# PIOAC 1197#    PIOAD 344 346 347 349 424 1196# PIOBC 1199# PIOBD 343 1198# PIOERR 1210# PIOMSK 1209# PROMSW 101 1226# PRTBSY 430 1211# PRTENT 1050# PRTINI 786 1048# 1061 PRTMSG 104 153 923 1032# 1039 1129 PSPT0 936 939587# RECLEN 132 165 1277# RESCMD 1012 1252# RESD10 990# 996 RESDMA 799 909 1019# RESDSK 124 985# 1059 RESTOR 809 994 1006# RETRY 783 804 1561# REV 96# RMSG 1106 1458# RSFLAG 567 640 648 704 1586# RWHS 778 932# SETDMA 71 139 173 547# SETSEC 70 143 541# SETTRK 69 141 534# SIGMSG 879 917# SIGNON 103 1405# SIOAC0 1175# SIOAC1 1183# SIOAD0 1174# SIOAD1 1182# SIOBC0 228 297 1177# SIOBC1 213 214 366  287 321 332 TTYS1 217 221# TTYST 203 212# 286 412 UC1IN 244 466# UC1OUT 281 469# UC1ST 206 485# UL1CNT 182 363 442 1592# UL1L10 366# 387 UL1L20 368 373# UL1L30 377# 379 386 UL1L40 375 384# U51# VSIDE 1112 1443# VSTAT 1125 1456# VTRK 1119 1447# WAIT 791 845 856# 1014 WAIT10 857# 858 WAIT20 867# 883 WAIT30 875 894# WAIT40 880# 896 899 WAIT50 870 889# WBOO10 124# 151 WBOO20 134# 168 WBOO30  -- DRIVE DOOR OPEN MESSAGE ; -- DETAILED ERROR MESSAGE ; -- DISK DRIVE MOTOR & LIGHT OFF WHEN UNUSED ; -- NO SEEK ON THE SAME TRACK ; -- NO SELECT DRIVE FOR THE SAME ; -- PRINTER INTERFACE WITH EPSON SERIAL AS DEFAULT ; -- SIO #1 ADDED 1293# 1294 1331 PSPT1 1313# 1314 PTPPUN 322 475# PTRRDR 310 471# PUNCH 65 319# RCVRDY 229 367 449 1203# RDACMD 1259# RDMA10 1021# 1023 RDSCMD 763 1257# RDSTAB 764 1348# RDTCMD 1260# RDWT10 672 679 69010 785# 810 RWHS20 788 792 799# RWHS30 808 812# RWHSEC 765 771# SECMSK 716 1334# SECTRN 75 555# SEECMD 840 1253# SEEK 787 827# SEEMSK 846 1247# SEKDSK 515 587 604 669 698 1568# SEKHST 657 683 7377 389 448 1185# 1384 SIOBD0 268 301 1176# SIOBD1 290 369 381 394 1184# SIOTAB 1060 1384# SPD0 1295# 1301 SPD1 1315# 1321 SPT0 159 1294# 1295 1301 1528 SPT1 1314# 1315 1321 STROBE 345 348 1208# TEMPBC 860L1L50 382 389# 391 400 403 UL1L60 372 397# UL1L70 399 402# UL1LSS 415 442# UL1LST 335 358# UL1SIZ 358 443 1541# UNACNT 183 564 586 596 603 646 1580# UNADSK 588 605 1581# UNASEC 592 619 1583#  145 156# WBOO40 160 164# WBOOT 60 118# 912 WMSG 1108 1460# WRALL 1167# WRDIR 745 1168# WRIT10 581 596# WRIT20 628 639# WRIT30 598 607 614 621 645# WRITE 73 576# WRITEH 693 755 767# WRMSG 1105 11 TO SERVE FOR PRINTER THROUGH CH. B ; TeleVideo Systems Incorporated Proprietary Information. ; This listing is supplied under the terms of a license ; agreement with TeleVideo Systems Incorporated and may ; not be copied nor disclosed except in acco# RDWT20 665 692 698# RDWT30 706 710# RDWT40 686 715# RDWT50 730 740# RDWT60 746 753# RDWTCM 570 641 652# RDYMSG 922 1465# READ 72 144 563# READER 66 307# READHS 707 762# READOP 566 577 728 102 1576# SEKSEC 542 591 618 654 715 1570# SEKTRK 505 535 589 611 676 700 1569# SELD10 966# 970 SELD20 967 972# SELDRV 777 963# 993 SELDSK 68 129 513# SELS10 937 941# SELS20 953# 956 SELSID  891 904 1487# TEMPDE 861 890 903 1488# TEMPHL 862 889 902 1489# TPD0 1290# 1295 TPD1 1310# 1315 TRKTAB 827 1007 1590# TRXRDY 298 378 390 1204# TSEC 943 1123 1493# TTYIN 241 248# 309 TTYOUT 278 286#  UNATRK 590 612 633 635 1582# UNMSTA 885 1563# UNUSED 76 77 78 79 80 460# UP1PUN 323 476# UP2PUN 324 477# UR1RDR 311 472# UR2RDR 312 473# VCMD 1109 1438# VDRIVE 921 1474# VER 95# VSEC 1122 1408# WRTYPE 569 579 744 1588# WRUAL 568 580 1169# WTSCMD 768 1258# WTSTAB 769 1364# WTTCMD 1261# 867596# WRIT20 628 639# WRIT30 598 607 614 621 645# WRITE 73 576# WRITEH 693 755 767# WRMSG 1105 11rdance with ; the terms of that agreement. TITLE TSICBIOS.MAC--TELEVIDEO SYSTEM TS-802 CBIOS -- AUG. 25, 1981 .Z80 CSEG .PHASE 0F200H ;******************************** ; THE FOLLOWING EQUATES ARE KEPT* ; ISOLATED FROM THE REST FOR *     ; PURPOSES OF MOVCPM GENERATION.* ;******************************** CPMBAS EQU $-BDOSLN ; BASE OF CP/M (CCP) BDOS EQU CPMBAS+CCPLEN+6 ; ADDRESS OF BDOS ENTRY SUBTTL BIOSBOOT.MAC--BOOTSTRAP MODULE PAGE INCLUDE BIOSBOOT.MAC SUBTTL BIOSCONTORE REGISTERS POP HL POP BC LD HL,BOOTRY ; CHECK ON RETRY SITUATION DEC (HL) JR NZ,WBOO10 ; MORE TRIES LEFT. LD HL,BOOMSG ; PRINT ERROR MESSAGE CALL PRTMSG JR $ ; AND DIE. WBOO30: POP DE ; ADJUST TRACK AND SECTOR INC E ; BUMP SECTODEFB 11001111B ; LOAD REGISTERS DEFB 00000101B ; A -> B, TRANSFER MODE DEFB 11001111B ; LOAD REGISTERS DEFB 10000111B ; ARM THE DMA WTSTAB: DEFB DMA ; PORT ADDRESS DEFB 15 ; TABLE COUNT DEFB 11000011B ; RESET THE DMA DEFB 01101101B ; PORTD, ; ETX/ACK PROTOCOL. SIOTAB: DEFB SIOBC1 ; PORT ADDRESS DEFB 8 ; TABLE SIZE DEFB 00011000B ; CHANNEL RESET DEFB 00011000B ; ANOTHER ONE DEFB 00010100B ; EXTERNAL STATUS RESET, POINT TO WR4 DEFB 01001100B ; X16 CLOCK, 2 STOP BITS DEFB 00 ; BDOS CONSTANTS ON ENTRY TO WRITE WRALL EQU 0 ;WRITE TO ALLOCATED WRDIR EQU 1 ;WRITE TO DIRECTORY WRUAL EQU 2 ;WRITE TO UNALLOCATED ; SIO #0 PORT DEFINITIONS ; CHANNEL B FOR CRT SIOAD0 EQU 0CH ; CHANNEL A DATA PORT FOR SIO 0 SIOAC0 EQU CLOCK CHANNEL CTC3 EQU 0BH ; FLOPPY DISK INTERRUPT CHANNEL ; PIO PORT DEFINITIONS PIOAD EQU 1CH ; PIO CHANNEL A DATA PORT PIOAC EQU 1EH ; PIO CHANNEL A CONTROL PORT PIOBD EQU 1DH ; PIO CHANNEL B DATA PORT PIOBC EQU 1FH ; PIO CHANNEL B CONTROS.MAC--CONSOLE I/O MODULE PAGE INCLUDE BIOSCONS.MAC SUBTTL BIOSDISK.MAC--DISK I/O MODULE PAGE INCLUDE BIOSDISK.MAC SUBTTL BIOSSUBS.MAC--SUBROUTINES MODULE PAGE INCLUDE BIOSSUBS.MAC SUBTTL BIOSEQU.MAC--EQUATES MODULE PAGE INCLUDE ; DATA STORAGE ; DMA INITIALIZATION TABLES FOR READ ; AND WRITE OPERATIONS RDSTAB: DEFB DMA ; PORT ADDRESS DEFB 15 ; TABLE COUNT DEFB 11000011B ; RESET THE DMA DEFB 01101101B ; PORT ADDRESS FOLLOWS DEFB FDCDAT ; FDC DATA PORT ADDRESS  ADDRESS FOLLOWS DEFB FDCDAT ; FDC DATA PORT ADDRESS DEFW 0FFH ; DISK BUFFER - 1 DEFB 00111100B ; PORT A IS FIXED DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS DEFW HSTBUF ; ADDRESS OF DISK BUF000011B ; POINT TO WR3 DEFB 11000001B ; 8 BITS RX, RX ENABLE DEFB 00000101B ; POINT TO WR5 DEFB 11101010B ; DTR, 8 BITS TX, RTS, TX ENABLE ; CTC IS BAUD GENERATOR FOR ; SIO. CTCTAB: DEFB CTC1 ; PORT ADDRESS FOR CTC DEFB 2 ; TABLE SIZE DE0EH ; CHANNEL A CONTROL PORT SIOBD0 EQU 0DH ; CHANNEL B DATA PORT FOR SIO 0 SIOBC0 EQU 0FH ; CHANNEL B CONTROL PORT ; SIO #1 PORT DEFINITIONS ; CHANNEL B FOR PRINTER SIOAD1 EQU 20H ; CHANNEL A DATA PORT FOR SIO 1 SIOAC1 EQU 22H ; CHANNEL A CL PORT ; SIO STATUS BIT DEFINITIONS RCVRDY EQU 0 ; RECEIVE CHARACTER AVAILABLE TRXRDY EQU 2 ; TRANSMITTER BUFFER EMPTY ; PIO CENTRONICS PRINTER INTERFACE DEFINITIONS STROBE EQU 0 ; PRINTER STROBE LINE PIOMSK EQU 00111000B ; MASK FOR READY, BIOSEQU.MAC SUBTTL BIOSDATA.MAC--DATA DEFINITION MODULE PAGE INCLUDE BIOSDATA.MAC .DEPHASE END  DEFW 0FFH ; DISK BUFFER - 1 DEFB 00111100B ; PORT A IS FIXED DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS DEFW HSTBUF ; ADDRESS OF DISK BUFFER DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK FER DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK DEFB 11001111B ; LOAD REGISTERS DEFB 00000001B ; B -> A, TRANSFER MODE DEFB 11001111B ; LOAD REGISTERS DEFB 10000111B ; ARM THE DMA ; SIO INITIALIZATION TABLE FOR ; SERIAL PRINTER, 9600 BAUFB 01000111B ; COUNTER MODE, VALUE FOLLOWS DEFB 4 ; COUNTDOWN FOR 9600 BAUD ; MESSAGES, MESSAGES SIGNON: DEFB 0DH DEFB 0AH DEFB 'TELEVIDEO SYSTEM TS-802 V2.0' DEFB 0DH DEFB 0AH DEFM '62k CP/M vers 2.2' DEFB 0DH DEFB 0AH DEFB 0 ; TONTROL PORT SIOBD1 EQU 21H ; CHANNEL B DATA PORT FOR SIO 1 SIOBC1 EQU 23H ; CHANNEL B CONTROL PORT ; CTC PORT DEFINITIONS CTC0 EQU 08H ; TERMINAL BAUD RATE GENERATOR CTC1 EQU 09H ; SERIAL PRINTER BAUD RATE GENERATOR CTC2 EQU 0AH ; REAL TIME  PAPER OUT, FAULT PIOERR EQU 00001000B ; ERROR STATE MASK PRTBSY EQU 05H ; PRINTER BUSY IS BIT #5 IN STATUS BYTE ; FDC EQUATES FDCCMD EQU 14H ; FDC STATUS AND COMMAND PORT FDCTRK EQU 15H ; FDC TRACK PORT FDCSEC EQU 16H ; FDC SECTOR PORT FDCD   AT EQU 17H ; FDC DATA PORT ; FLOPPY DRIVE SELECT LATCH FDD EQU 18H ; DRIVE SELECT LATCH ; SYSTEM PROM SWITCH ADDRESS PROMSW EQU 04H ; SYSTEM PROM DISABLE ADDRESS DEFDSK EQU 04H ; DEFAULT DRIVE NUMBER ; DMA PORT ADDRESS DMA EQU 10H ;B ; DRIVE NOT READY MASK ; FDC COMMAND BYTES RESCMD EQU 00000000B ; HOME HEAD COMMAND, NO VERIFY SEECMD EQU 00010100B ; SEEK TRACK COMMAND HDSCMD EQU 00110100B ; HEAD STEP, PREVIOUS DIRECTION HSICMD EQU 01010100B ; HEAD STEP IN, TOWARD HUB. HSOCM ADDRESS IOBYTE EQU 0003H LOGDRV EQU 0004H ; CURRENTLY LOGGED DRIVE ADDRESS JP EQU 0C3H ; JUMP OPCODE. RECLEN EQU 128 ; NO. OF BYTES IN CP/M RECORD (SECTOR). BDOSLN EQU 1600H ; LENGTH OF BDOS, IN BYTES. CCPLEN EQU 800H ; LENGTH OF CCP, IN BYTES NTRIES BLS0 EQU 2048 ; BLOCK SIZE BSH0 EQU 4 ; BLOCK SHIFT FACTOR BLM0 EQU (BLS0/128)-1 ; BLOCK MASK EXM0 EQU 0 ; EXTENT MASK DSM0 EQU ((SPD0-(SPT0*OFF0))/(BLM0+1))-1 ;CP/M BLOCK PER DISK DRM0 EQU EPD0-1 ; DIRECTORY ENTRIES - 1 ALL0 EQU 100000ROM OFF (DEBUG) LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER LD HL,SIGNON ; PRINT SIGNON MESSAGE CALL PRTMSG XOR A ; MAKE LOGGED DRIVE 0 LD (DRIVE),A ; SAVE IT FOR LATER LD (LOGDRV),A LD A,00010101B ; INITIALIZE IOBYTE LD (IOBYTE),A CALERO CALL SELDSK ; FROM WHICH TO BOOT LD HL,CPMBAS ; INITIAL DMA ADDRESS LD DE,0002H ; D=INITIAL TRACK, E=INITIAL SECTOR LD B,BDOSLN/RECLEN ; LENGTH OF TRANSFER, IN SECTORS WBOO20: PUSH BC ; SAVE REGISTERS PUSH HL PUSH DE LD C,L ; MOVE T DMA PORT ADDRESS ; FDC STATUS BITS FDCBSY EQU 0 ; FDC BUSY IS BIT 0 FDCIND EQU 1 ; FDC INDEX HOLE DETECTED FDCTR0 EQU 2 ; FDC TRACK 0 DETECTED FDCCRC EQU 3 ; FDC CRC ERROR ENCOUNTERED FDCSEE EQU 4 ; FDC SEEK ERROR ENCOUNTERED FDCHLD EQU 5 D EQU 01110100B ; HEAD STEP OUT, TOWARD EDGE. RDSCMD EQU 10000000B ; READ SECTOR WTSCMD EQU 10100000B ; WRITE SECTOR RDACMD EQU 11000000B ; READ SECTOR ADDRESS RDTCMD EQU 11100000B ; READ TRACK WTTCMD EQU 11110000B ; WRITE TRACK FRCCMD EQU 11010000B  ; DISK PARAMETER BLOCKS. ; FIRST COME THE EQUATES ; FOR DISK PARAMETER BLOCKS BPDE EQU 32 ; BYTES/DIRECTORY ENTRY ; DRIVE 0 EQUATES OFF0 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD0 EQU 40 ; NUMBER OF TRACKS/DISK BPS0 EQU 256 ;  ; **************** BIOS JUMP TABLE ***************** BIOS: JP BOOT JP WBOOT JP CONST JP CONIN JP CONOUT JP LIST JP PUNCH JP READER JP HOME JP SELDSK JP SETTRK JP SETSEC JP SETDMA JP READ JP WRITE JP LISTST JP SECTRN L HDWINI ; INITIALIZE SYSTEM HARDWARE JR GOCPM ; DO MORE INITIALIZATION ; WE JUMP TO HERE WHENEVER THE USER WANTS ; TO RESTART THE SYSTEM, I. E., REREAD CP/M ; WITHOUT MODIFYING THE BIOS WBOOT: LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER LD ARANSFER ADDRESS TO BC LD B,H CALL SETDMA ; SET DATA TRANSFER ADDRESS LD C,D CALL SETTRK ; SET TRACK REGISTER TO D LD C,E CALL SETSEC ; SET SECTOR REGISTER TO E CALL READ ; READ A SECTOR JR Z,WBOO30 ; READ SUCCESSFUL POP DE ; ELSE RE ; FDC HEAD LOAD ACK. FDCPRT EQU 6 ; FDC DISK IS WRITE PROTECTED FDCRDY EQU 7 ; FDC DISK NOT READY BIT ; FDC STATUS BYTE MASKS ERRMSK EQU 11011100B ; MASK OFF INSIGNIFICANT BITS SEEMSK EQU 10011000B ; CHECK THE NOT READY BIT DNRMSK EQU 10000000; FORCE TERMINATION ; ASCII EQUATES ASCETX EQU 03H ; ASCII END OF TRANSMISSION ASCACK EQU 06H ; ASCII ACKNOWLEDGEMENT ASCLF EQU 0AH ; ASCII LINE FEED ASCCR EQU 0DH ; ASCII CARRIAGE RETURN ; CP/M EQUATES CPMBUF EQU 80H ; DEFAULT CP/M DMANUMBER OF BYTES/SECTOR NSIDE0 EQU 2 ; NUMBER OF SIDE/DISK PSPT0 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK SPT0 EQU ((BPS0/128)*PSPT0)*NSIDE0 ;NUMBER OF CP/M SECTOR/TRACK SPD0 EQU SPT0*TPD0 ; NUMBER OF SECTORS/DISK EPD0 EQU 64 ; NUMBER OF DIRECTORY EJP UNUSED JP UNUSED JP UNUSED JP UNUSED JP UNUSED ; COPYRIGHT STATEMENT DEFM '(C) 1981, TELEVIDEO SYSTEMS INC.' ; VERSION AND REVISION NO. VER: DEFB 2 REV: DEFB 0 ; COME HERE FROM COLDSTART LOADER BOOT: OUT (PROMSW),A ; SHUT P,NOTRYS ; NUMBER OF RETRIES FOR BOOT LD (BOOTRY),A ; STORE IT. XOR A ; PREVENT BUFFER FLUSH LD (HSTACT),A ; CONDITION ON WRITE ERROR WBOO10: CALL RESDSK ; RESET DISK SUBSYSTEM ; INITIALIZE THE TRANSFER PARAMETERS LD C,0 ; SELECT DRIVE ZTORE REGISTERS POP HL POP BC LD HL,BOOTRY ; CHECK ON RETRY SITUATION DEC (HL) JR NZ,WBOO10 ; MORE TRIES LEFT. LD HL,BOOMSG ; PRINT ERROR MESSAGE CALL PRTMSG JR $ ; AND DIE. WBOO30: POP DE ; ADJUST TRACK AND SECTOR INC E ; BUMP SECTO    R NO. LD A,E CP SPT0 ; END OF CURRENT TRACK? JR C,WBOO40 ; NO. LD E,0 ; CYCLE THE SECTOR NO. INC D ; AND INCREMENT THE TRACK WBOO40: POP HL ; RECALL THE TRANSFER ADDRESS LD BC,RECLEN ; ADD IN A SECTOR ADD HL,BC POP BC ; RESTORE SECT A,(LOGDRV) ; PASS LOGGED DRIVE NO. LD C,A ; IN REG-C JP CPMBAS ; TO CCP ; END OF BIOSBOOT.MAC  COUNT LD (UL1CNT),A ; ON COLD OR WARM START LD (UNACNT),A ; UNALLOCATED SECTOR COUNT LD (HSTACT),A ; BUFFER INACTIVE LDUN ON. DJNZ RDMA10 ; LOOP FOR ANOTHER TIME POP BC ; RESTORE REGISTER PAIR RET ; ALL DONE ; MISCELANEOUS ROUTINES ; PRINT THE STRING POINTED TO BY HL ; AND TERMINATED BY NULL (0). PRTMSG: LD A,(HL) OR A RET Z ; ALL DONE LD C,A U 256 ; NUMBER OF BYTES/SECTOR NSIDE1 EQU 2 ; NUMBER OF DISK SIDE PSPT1 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK SPT1 EQU ((BPS1/128)*PSPT1)*NSIDE1 ; NUMBER OF CP/M SECTORS/TRACK SPD1 EQU SPT1*TPD1 ; NUMBER OF SECTORS/DISK EPD1 EQU 64 ; NUMBER OF OR SIZE HSTSPT EQU PSPT0*NSIDE0 ; SYSTEM DISK SECTOR PER TRACK HSTBLK EQU HSTSIZ/128 ; CP/M SECTORS/HOST BUFFER CPMSPT EQU HSTBLK*HSTSPT ; CP/M SECTOR PER TRACK SECMSK EQU HSTBLK-1 ; SECTOR MASK MAXDRV EQU 1 ; MAXIMUM DRIVE NO. NODRVS EQU MAXDRV+1 ; CENTRONICS PARALLEL DEVICE. LPTLST: CALL LPTLSS ; CHECK STATUS JR NZ,LPTLST ; LOOP UNTIL PRINTER READY LD A,C ; LOAD THE CHARACTER OUT (PIOBD),A ; INTO PIO CHANNEL B DATA REG. IN A,(PIOAD) ; READ PRINTER CONTROL LINES RES STROBE,A ; PULSE TOR COUNT DJNZ WBOO20 ; GO READ NEXT SECTOR. ; CODE SHARED BY BOTH WARM AND COLD STARTS GOCPM: LD BC,CPMBUF ; INITIALIZE DMA ADDRESS CALL SETDMA LD A,JP ; INITIALIZE LOW MEMORY LD (0000H),A LD HL,BIOS+3 ; WARM BOOT JUMP ENTRY LD (0001H) DRIVE ALSO. RESTOR: LD A,(HSTDSK) ; GET THE CURRENT DRIVE LD HL,TRKTAB ; BASE ADDRESS OF CURRENT TRACK TABLE LD E,A LD D,0 ; MAKE DRIVE NO. AN INDEX. ADD HL,DE ; ADD IN INDEX. LD (HL),0 ; CLEAR CURRENT TRACK TO 0. LD A,RESCMD ; FDC RESTO CALL CRTOUT ; OUTPUT IT INC HL JR PRTMSG ; AND LOOP BACK ; GENERAL PORT INITIALIZATION ROUTINE ; ENTRY: HL -> PORT ADDRESS ; BYTE COUNT ; DATA ; | ; | PRTINI: LD C,(HL) ; GET PORT ADDRESS INC HL PRTENT: LD B,(HL) DIRECTORY ENTRIES BLS1 EQU 2048 ; BLOCK SIZE BSH1 EQU 4 ; BLOCK SHIFT FACTOR BLM1 EQU (BLS1/128)-1 ; BLOCK MASK EXM1 EQU 0 ; EXTENT MASK DSM1 EQU ((SPD1-(SPT1*OFF1))/(BLM0+1))-1 ; CP/M BLOCK PER DISK DRM1 EQU EPD1-1 ; DIRECTORY ENTRIES-1 ALL1 EQ NO. OF DRIVES IN SYSTEM NOTRYS EQU 10 ; NO. OF RETRIES ON SEEK, READ, WRITE.TBLK*HSTSPT ; CP/M SECTOR PER TRACK SECMSK EQU HSTBLK-1 ; SECTOR MASK MAXDRV EQU 1 ; MAXIMUM DRIVE NO. NODRVS EQU MAXDRV+1 ;ERMINATION BOOMSG: DEFB 0DH DEFB 0AH DEFM 'Boot Error.' ; ERROR ON WARM BOOT DEFB 0DH DEFB 0AH DEFB 0 ; DETAILED ERROR MESSAGE TABLE ERRMSG: DEFB 0DH DEFB 0AH VCMD: DEFS 5 ; COMMAND DEFB ' ERROR: SIDE# ' VSIDE: DEFS 1 ; SIDE DE,HL ; STORE IT LD (0005H),A LD HL,BDOS ; BDOS ENTRY POINT LD (0006H),HL ; STORE IT XOR A ; CLEAR SERIAL PRINTER BUFFER COUNT LD (UL1CNT),A ; ON COLD OR WARM START LD (UNACNT),A ; UNALLOCATED SECTOR COUNT LD (HSTACT),A ; BUFFER INACTIVE LDRE COMMAND OUT (FDCCMD),A ; SEND IT. CALL WAIT ; WAIT FOR COMPLETION RET ; RESET THE DMA SIX TIMES TOTAL RESDMA: PUSH BC ; DON'T DESTROY REGGIES LD B,6 ; COUNTER RDMA10: LD A,11000011B ; RESET THE DMA OUT (DMA),A ; SO THAT IT DOESN'T R00B ; DIRECTORY BLOCK BIT MAP LOW ALH0 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS0 EQU (DRM0+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR ; DRIVE 1 EQUATES OFF1 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD1 EQU 40 ; NUMBER OF TRACKS/DISK BPS1 EQU 10000000B ; DIRECTORY BLOCK BIT MAP LOW ALH1 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS1 EQU (DRM1+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR ; CP/M HOST DISK CONSTANTS BLKSIZ EQU BLS0 ; CP/M ALLOCATION BLOCK SIZE HSTSIZ EQU BPS0 ; SYSTEM DISK SECTEVICE DEFB 0 ; LIST POSITION IN IOBYTE DEFW TTYOUT ; OUTPUT TO TELETYPE DEVICE DEFW CRTOUT ; OUTPUT TO CRT DEVICE DEFW LPTLST ; LINE PRINTER DEVICE DEFW UL1LST ; USER DEFINED PRINTING DEVICE ; THIS IS THE PRINTER OUTPUT ROUTINE ; FOR THEFB ', TRACK# ' VTRK: DEFS 2 ; TRACK NUMBER DEFB ', SECTOR# ' VSEC: DEFS 2 ; SECTOR NUMBER DEFB ', FDC STATUS ' VSTAT: DEFS 2 ; ERROR STATUS DEFB 0 RMSG: DEFB 'READ ' WMSG: DEFB 'WRITE' ; DOOR MESSAGE TABLE RDYMSG: DEFB 0DH DEFB 0AH     DEFM 'Check the disk in drive "' VDRIVE: DEFS 1 DEFM '", and close the door.' DEFB 0DH DEFB 0AH DEFB 0 ; TEMPORARY STORAGES FOR REGISTERS TEMPBC: DEFW 0 TEMPDE: DEFW 0 TEMPHL: DEFW 0 JMPSW: DEFB 0 ; FLAG FOR DOOR MESSAGE PRINT DRIVE: SK ALLOCATION SCRATCHPAD ; DRIVE 1 DISK PARAMETER HEADER HEAD1: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 1 DEFW 0 ; BDOS SCRATCH WORDS DEFW 0 ; THREE OF THEM DEFW 0 DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK DEFW DPRMB DEFW CKS0 ; SIZE OF DIRECTORY CHECK VECTOR DEFW OFF0 ; NO. OF TRACKS RESERVED FOR SYSTEM ; MISCELLANEOUS INITIALIZED STORAGE UL1SIZ: DEFB 80H ; SIZE OF SERIAL PRINTER BUFFER ; UNALLOCATED STORAGE AREAS DIRBUF: DEFS 128 ; DIRECTORY BUFITIALIZE PARAMETER POINTER ; UNITIALIZED RAM DATA AREAS SEKDSK: DEFS 1 ; SEEK DISK NUMBER SEKTRK: DEFS 1 ; SEEK TRACK NUMBER SEKSEC: DEFS 1 ; SEEK SECTOR NUMBER HSTDSK: DEFS 1 ; HOST DISK NUMBER HSTTRK: DEFS 1 ; HOST TRACK NUMBER HSTSEC:  DMA ADDRESS TRKTAB: DEFS NODRVS ; CURRENT TRACK TABLE HSTBUF: DEFS HSTSIZ ; HOST DISK I/O BUFFER AREA. UL1CNT: DEFS 1 ; SERIAL PRINTER BUFFER COUNT ; END OF BIOSDATA.MAC  >##$$(ɯ=G>=12  x >2x [f (y!W(y 1[[f yˇ:G_!4#G(!("{ #W(>!x(8#W(y!~(8w o>DEFS 1 ; STORAGE FOR SAVING CURRENT DRIVE NO TSEC: DEFS 1 ; TARGET SECTOR MOTFLG: DEFB 1 ; MOTOR ON-OFF FLAG ; HERE ARE THE VERSION 2 DISK PARAMETER TABLES DPBASE: ; DRIVE 0 DISK PARAMETER HEADER HEAD0: DEFW 0 ; ADDR. OF SECTOR TRANSLATE 1 ; ADDR. OF DISK PARAMETER BLOCK 1 DEFW CHKSV1 ; ADDR. OF CHECK SCRATCHPAD DEFW ALOCV1 ; ADDR. OF DISK ALLOCATION SCRATCHPAD ; HERE ARE THE DISK PARAMETER BLOCKS DPRMB0: DPRMB1: DEFW SPT0 ; NO. OF SECTOR PER TRACK DEFB BSH0 ; BLOCFER ; DRIVE 0 STORAGE AREA ALOCV0: DEFS (DSM0/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV0: DEFS CKS0 ; CHECK VECTOR STORAGE ; DRIVE 1 STORAGE AREA ALOCV1: DEFS (DSM1/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV1: DEFS CKS1 ; CHECK VECTOR STORAGE ;DEFS 1 ; HOST SECTOR NUMBER SEKHST: DEFS 1 ; SEEK HOST SECTOR NUMBER HSTACT: DEFS 1 ; HOST ACTIVE FLAG HSTWRT: DEFS 1 ; HOST BUFFER WRITE PENDING FLAG UNACNT: DEFS 1 ; UNALLOATED SECTOR COUNT UNADSK: DEFS 1 ; UNALLOCATED DISK UNATRK: DEFS 1B 01000111B ; COUNTER MODE, VALUE FOLLOWS DEFB 32 ; COUNTDOWN FOR 1200 BAUD ; MESSAGES, MESSAGES SIGNON: DEFB 0DH DEFB 0AH DEFB 'TELEVIDEO SYSTEM TS-801 V2.0' DEFB 0DH DEFB 0AH DEFM '62k CP/M vers 2.2' DEFB 0DH DEFB 0AH DEFB 0 ; T/ɯ!:>#G>>ɯ: 22}!y2|o&))))yy2}y2~C`iɯ2>22>22y2 >2:|2:}2:~2:(4=2:|! ':}! :~! 4~H8 6:<222<22:~2!~6(%:|! :}! :!(*:TABLE FOR DISK 0 DEFW 0 ; BDOS SCRATCH WORDS DEFW 0 ; THREE OF THEM DEFW 0 DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK DEFW DPRMB0 ; ADDR. OF DISK PARAMETER BLOCK 0 DEFW CHKSV0 ; ADDR. OF CHECK SCRATCHPAD DEFW ALOCV0 ; ADDR. OF DIK SHIFT FACTOR DEFB BLM0 ; BLOCK MASK DEFB EXM0 ; EXTENT MASK DEFW DSM0 ; DETERMINES TOTAL STORAGE CAPACITY DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY DEFB ALH0 ; HIGH ORDER BYTE OF ABOVE  DISK I/O COMMAND PARAMETERS COMAND: DEFS 1 ; CURRENT COMMAND FDDBYT: DEFS 1 ; DRIVE, SIDE, DENSITY, SELECT LATCH RETRY: DEFS 1 ; RETRY COUNT BOOTRY: DEFS 1 ; BOOT RETRY COUNT UNMSTA: DEFS 1 ; UNMASKED VERSION OF ABOVE DMATAB: DEFS 2 ; DMA IN ; UNALLOCATED TRACK UNASEC: DEFS 1 ; UNALOCATED SECTOR ERFLAG: DEFS 1 ; ERROR REPORTING RSFLAG: DEFS 1 ; PRE-READ SECTOR FLAG READOP: DEFS 1 ; 0 IF WRITE OPERATION; 1 IF READ OPER. WRTYPE: DEFS 1 ; WRITE OPERATION TYPE DMAADR: DEFS 2 ; LASTdÀ%OÈ|p+AFKSgP(C) 1981, TELEVIDEO SYSTEMS INC.1!2v2>2T1> 2x2ͪ+!,MDKJAKFS(!x5 !{H8 K>2!"2!"222:O(f:|2:}2:2:(_2:~g.<[: >2:(:ɯ2f>!>!2u"z:!vēb> 2w*zͻ :u ::!w~5(:!:O ~G:w>>= CoSq"s>2u2 :u!     xNG 2y2*s[qKo(% *s[qKo>>2À>2u:A2U!::vOˑ:8<2wy2v:x>2x@ x w(!=:v2v>2vx2!v͓:!_6>>~Of#N#F#ͪ!7|ʷ*>,ͧE::<>,D::<269269!+͂+f+*ͪ*)9|*Q*6 H:*>ɧE ELENo Fatal error(s) Warning(s):L8G)+!8+͂+Rf+REPT/IRP/IRPC/MACROUnterminated ͛+! +V> ݓ> ̓>:<> D> D!L+::SET FLAG LD (JMPSW),A LD A,(HSTDSK) ; CURRENT DRIVE ADD A,41H ; MAKE IT ASCII LD (VDRIVE),A ; SAVE FOR LATER LD HL,RDYMSG ; PRINT DOOR MESSAGE CALL PRTMSG RET ; SELECT THE PROPER SIDE OF THE ; DISKETTE TO SEEK, DEPENDING ON ; THE LOGICA,A ; SAVE FOR LATER LD A,C ; GET NEW SIDE. LD (FDDBYT),A ; RESTORE IT TO THE MEMORY IMAGE OUT (FDD),A ; AND LATCH LD A,(MOTFLG) ; MOTOR ON-OFF FLAG CP 0 ; MOTOR OFF? RET NZ ; NO, SKIP DELAY LD A,1 LD (MOTFLG),A ; SET MOTOR ON FLAG LD HSEC: LD (COMAND),A LD (DMATAB),HL LD A,(HSTDSK) LD HL,DRIVE ; CURRENT DRIVE CP (HL) ; SAME DRIVE? CALL NZ,SELDRV ; NO, HARDWARE SELECT THE DRIVE CALL SELSID ; SELECT THE PROPER SIDE ; READY TO READ OR WRITE A PHYSICAL SECTOR LD A,E OPERATION RWHS20: CALL RESDMA ; RESET THE DMA ON ABORT LD A,(ERFLAG) ; IF DRIVE NOT READY, BIT FDCRDY,A ; DON'T BOTHER WITH RETRIES RET NZ ; RETURN ERROR FLAG IN A LD HL,RETRY ; MORE RETRIES LEFT? LD A,(HL) DEC (HL) ; BUMP DOWN COUNT ~#G:(O ^#V:u !0!5!:vW(6261!:c!:wc!-:c!sw#sw 007m<͑χm<͑χ#L G TELEVIDEO SYSTEM TS-802 V2.0 62k CP/M vers 2.2 Boot Error. 9) ERROR<×@ConditionalSymbols: Macros: :9!"9"9*9+!9!*94zW{_24>?<29292=*9$6 ","9%5!95ð+~<=8ymbols: Macros: :9!"9"9*9+!9!*94zW{_24>?<29292=*9$6 ","9%5!9L SECTOR NO. IN HSTSEC. ; GO AHEAD AND SET THE FDC SECTOR ; REGISTER. SELSID: LD A,(FDDBYT) ; GET THE DRIVE SELECT LATCH IN MEMORY LD C,A ; HOLD IT IN C FOR A BIT. RES 2,C ; CHOOSE SIDE 0, FOR NOW. LD A,(HSTSEC) ; GET THE LOGICAL HOST SECTOR BC,40000 ; NEEDS DELAY FOR ABOUT 300MSEC SELS20: DEC BC ; COUNT DOWN LD A,B OR C ; REACHED ZERO YET? JR NZ,SELS20 ; NO, LOOP BACK RET ; ALL DONE. ; SELECT THE DRIVE IN HARDWARE. ; DRIVE TO BE SELECTED IS PASSED ; IN REGISTER A. SELDRV:10 ; NO. OF RETRIES LD (RETRY),A ; ON DISK I/O OPERATION RWHS10: LD HL,(DMATAB) ; GET DMA INITIALIZE PARAMETER POINTER CALL PRTINI ; DO DMA INITIALIZATION. CALL SEEK ; SEEK THE USER DEFINED TRACK JR NZ,RWHS20 ; ADJUST RETRY COUNTER LD A,(CO OR A JR Z,RWHS30 ; ALL DONE, WE FAILED. CALL RESTOR ; SEEK TRACK 0. JR RWHS10 ; LOOP BACK FOR ANOTHER SHOT. RWHS30: CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE LD A,(ERFLAG) ; RETURN ERROR OR A ; SET/CLEAR Z FLAG. RET ; END OF BIOS: SIDE# =, TRACK# ), SECTOR# :#, FDC STATUS READ WRITE Check the disk in drive "", and close the door. ?)eOH?"7͙!+!M9>%6̓!+!9>%6̓ f+*khh* ::<229269Â*!*͂+!+͂+*mMINATE OUT (FDCCMD),A OUT (FDCCMD),A CALL RESDMA ; RESET DMA LD A,0 LD (DEFDSK),A ; SET DEFAULT DRIVE TO A JP WBOOT ; WARM-BOOT ; THIS ROUTINE PRINTS DOOR MESSAGE WHEN THERE IS AN ACCESS TO ; A DRIVE WITH DOOR OPENED SIGMSG: LD A,1 ;  CP PSPT0 ; SECTOR >= THAN MAXIMUM SECTOR? JR C,SELS10 ; IF NOT THEN SELECT SIDE 0 SET 2,C ; CHOOSE SIDE 1. SUB PSPT0 ; DE-BIAS SECTOR NO. SELS10: INC A ; PHYSICAL SECTORS HAVE ORIGIN 1 OUT (FDCSEC),A ; SEND SECTOR TO CONTROLLER LD (TSEC) LD (HL),A ; SAVE CURRENT DRIVE FOR LATER LD C,00010000B ; THIS IS THE MASK FOR DRIVE 0 SELD10: OR A ; HAVE WE GOT THE RIGHT MASK? JR Z,SELD20 ; YES. SLA C ; SHIFT DRIVE MASK OVER 1 BIT LEFT. DEC A ; DOWN THE COUNTER. JR SELD10 ; AND LOOPMAND) ; SET UP FDC OUT (FDCCMD),A ; COMMAND REGISTER CALL WAIT ; WAIT FOR CONTROLLER NOT BUSY JR NZ,RWHS20 ; ERROR ON READ/WRITE LD A,(ERFLAG) ; RETURN CODE OR A ; SET/CLEAR Z FLAG RET ; DISK I/O SUCCESSFUL ; WE HAD AN ERROR ON READ/WRITDISK.MAC  CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE LD A,(ERFLAG) ; RETURN ERROR OR A ; SET/CLEAR Z FLAG. RET ; END OF BIOS!   JP UNUSED JP UNUSED JP UNUSED JP UNUSED JP UNUSED ; COPYRIGHT STATEMENT DEFM '(C) 1981, TELEVIDEO SYSTEMS INC.' ; VERSION AND REVISION NO. VER: DEFB 2 REV: DEFB 0 ; COME HERE FROM COLDSTART LOADER BOOT: OUT (PROMSW),A ; SHUT P,NOTRYS ; NUMBER OF RETRIES FOR BOOT LD (BOOTRY),A ; STORE IT. XOR A ; PREVENT BUFFER FLUSH LD (HSTACT),A ; CONDITION ON WRITE ERROR WBOO10: CALL RESDSK ; RESET DISK SUBSYSTEM ; INITIALIZE THE TRANSFER PARAMETERS LD C,0 ; SELECT DRIVE ZTORE REGISTERS POP HL POP BC LD HL,BOOTRY ; CHECK ON RETRY SITUATION DEC (HL) JR NZ,WBOO10 ; MORE TRIES LEFT. LD HL,BOOMSG ; PRINT ERROR MESSAGE CALL PRTMSG JR $ ; AND DIE. WBOO30: POP DE ; ADJUST TRACK AND SECTOR INC E ; BUMP SECTO,HL ; STORE IT LD (0005H),A LD HL,BDOS ; BDOS ENTRY POINT LD (0006H),HL ; STORE IT XOR A ; CLEAR SERIAL PRINTER BUFFER COUNT LD (UL1CNT),A ; ON COLD OR WARM START LD (UNACNT),A ; UNALLOCATED SECTOR COUNT LD (HSTACT),A ; BUFFER INACTIVE LDTERS POP BC JP (HL) ; OFF WE GO, INTO THE WILD BLUE YONDER! ; THIS ROUTINE FILLS OUT THE DETAILED ERROR MESSAGE TABLE ; OBTAINING VARIABLE VALUES FROM CURRENT STATE. ; THEN CALLS PRTMSG ROUTINE WITH THE TABLE ADDRESS IN HL ERRPRT: LD A,(COMANDROM OFF (DEBUG) LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER LD HL,SIGNON ; PRINT SIGNON MESSAGE CALL PRTMSG XOR A ; MAKE LOGGED DRIVE 0 LD (DRIVE),A ; SAVE IT FOR LATER LD (LOGDRV),A LD A,00010101B ; INITIALIZE IOBYTE LD (IOBYTE),A CALERO CALL SELDSK ; FROM WHICH TO BOOT LD HL,CPMBAS ; INITIAL DMA ADDRESS LD DE,0002H ; D=INITIAL TRACK, E=INITIAL SECTOR LD B,BDOSLN/RECLEN ; LENGTH OF TRANSFER, IN SECTORS WBOO20: PUSH BC ; SAVE REGISTERS PUSH HL PUSH DE LD C,L ; MOVE TR NO. LD A,E CP SPT0 ; END OF CURRENT TRACK? JR C,WBOO40 ; NO. LD E,0 ; CYCLE THE SECTOR NO. INC D ; AND INCREMENT THE TRACK WBOO40: POP HL ; RECALL THE TRANSFER ADDRESS LD BC,RECLEN ; ADD IN A SECTOR ADD HL,BC POP BC ; RESTORE SECT A,(LOGDRV) ; PASS LOGGED DRIVE NO. LD C,A ; IN REG-C JP CPMBAS ; TO CCP ; END OF 802FBOOT.MAC  COUNT LD (UL1CNT),A ; ON COLD OR WARM START LD (UNACNT),A ; UNALLOCATED SECTOR COUNT LD (HSTACT),A ; BUFFER INACTIVE LD) ; CURRENT COMMAND CP 80H ; READ? JR NZ,WRMSG ; NO, SKIP LD HL,RMSG ; READ MESSAGE JR ERR10 WRMSG: LD HL,WMSG ; WRITE MESSAGE ERR10: LD DE,VCMD ; COMMAND MESSAGE ADDRESS IN TABLE LD BC,5 LDIR ; STORE IN TABLE LD HL,VSIDE ; SIDE VARIA ; **************** BIOS JUMP TABLE ***************** BIOS: JP BOOT JP WBOOT JP CONST JP CONIN JP CONOUT JP LIST JP PUNCH JP READER JP HOME JP SELDSK JP SETTRK JP SETSEC JP SETDMA JP READ JP WRITE JP LISTST JP SECTRN L HDWINI ; INITIALIZE SYSTEM HARDWARE JR GOCPM ; DO MORE INITIALIZATION ; WE JUMP TO HERE WHENEVER THE USER WANTS ; TO RESTART THE SYSTEM, I. E., REREAD CP/M ; WITHOUT MODIFYING THE BIOS WBOOT: LD SP,CPMBUF+80H ; INITIALIZE STACK POINTER LD ARANSFER ADDRESS TO BC LD B,H CALL SETDMA ; SET DATA TRANSFER ADDRESS LD C,D CALL SETTRK ; SET TRACK REGISTER TO D LD C,E CALL SETSEC ; SET SECTOR REGISTER TO E CALL READ ; READ A SECTOR JR Z,WBOO30 ; READ SUCCESSFUL POP DE ; ELSE REOR COUNT DJNZ WBOO20 ; GO READ NEXT SECTOR. ; CODE SHARED BY BOTH WARM AND COLD STARTS GOCPM: LD BC,CPMBUF ; INITIALIZE DMA ADDRESS CALL SETDMA LD A,JP ; INITIALIZE LOW MEMORY LD (0000H),A LD HL,BIOS+3 ; WARM BOOT JUMP ENTRY LD (0001H) OFF DON'T CARE BITS RLA ; FORM WORD OFFSET LD C,A ; FORM 16 BITS, B ALREADY 0 ADD HL,BC ; ADD IN BASE ADDRESS LD E,(HL) ; TRANSFER DISPATCH ADDRESS INC HL ; TO REGISTERS DE LD D,(HL) EX DE,HL ; RESULT INTO HL POP DE ; RESTORE REGISBLE LD A,(FDDBYT) ; MEMORY IMAGE BIT 2,A ; SIDE BIT JR Z,ONE ; 0 - SIDE 1 LD (HL),32H ; ASCII 2 JR CONT10 ONE: LD (HL),31H ; ASCII 1 CONT10: LD HL,VTRK ; TRACK VARIABLE LD A,(HSTTRK) ; CURRENT TRACK NUMBER CALL FTAB ; FILL OUT TABLE ROU"    ; TEST THE STATUS OF THE CONSOLE INPUT TO ; SEE IF A CHARACTER IS AVAILABLE. ; EXIT: A=0FFH -> CHARACTER AVAILABLE ; A=0 -> NO CHARACTER CONST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYST ; CONSOTYS1: XOR A DEC A ; A = FF RET ; CONSOLE STATUS ROUTINE FOR STANDARD ; CRT TERMINAL DEVICE, SIO #0 CHANNEL B. CRTST: IN A,(SIOBC0) ; READ SIO STATUS BIT RCVRDY,A ; CHARACTER AVAILABLE? LD A,0 RET Z ; NO. A = 0 DEC A ; YES. A = FFH LE CRTIN: PUSH BC LD BC,8000H ; TIME-OUT FOR 1/2 SECOND CRT20: CALL CRTST ; CHECK THE STATUS JR NZ,CRT10 ; SKIP DEC BC ; COUNT DOWN LD A,B ; BC REACHED ZERO? OR C JR NZ,CRT20 ; NO, LOOP BACK LD A,0 ; MOTOR AND LIGHT OFF OUT (FDD),AOUTPUT ROUTINE FOR SERIAL EPSON AND TI PRINTER ; SIO CHANNEL A. TTYOUT: CALL TTYST ; CHECK STATUS OF PRINTER JR Z,TTYOUT ; NOT READY, LOOP BACK LD A,C ; GET CHARACTER IN REG. C AND 7FH ; STRIP OFF PARITY OUT (SIOBD1),A ; SEND OUT RET ;  DEFW UR1RDR ; USER DEFINED READER #1 DEFW UR2RDR ; USER DEFINED READER #2 ; PAPER TAPE PUNCH ROUTINE, ; CURRENTLY DUMMIED OUT, ; PRETTY MUCH. PUNCH: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 4 ; PUNCH POSITION IN IOBYTE DEFW TINTING DEVICE ; THIS IS THE PRINTER OUTPUT ROUTINE ; FOR THE CENTRONICS PARALLEL DEVICE. LPTLST: CALL LPTLSS ; CHECK STATUS JR NZ,LPTLST ; LOOP UNTIL PRINTER READY LD A,C ; LOAD THE CHARACTER OUT (PIOBD),A ; INTO PIO CHANNEL B DATA REG. INLE PRINTER DEVICE DEFW CRTST ; CONSOLE CRT DEVICE DEFW BATST ; CONSOLE BATCH DEVICE DEFW UC1ST ; USER DEFINED CONSOLE ; PRINTER STATUS ROUTINE FOR SERIAL ; INTERFACE WITH EPSON AND TI ; SIO #1 CHANNEL B TTYST: LD A,00010000B ; RESET EXTRN/ RET ; GRAB A CHARACTER FROM CONSOLE INPUT. ; EXIT: A=RETURNED CHARACTER CONIN: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYIN ; CONSOLE PRINTER DEVICE DEFW CRTIN ; CONSOLE CRT DEVICE DEFW BATIN  ; SEND OUT LD (MOTFLG),A ; MOTOR ON-OFF FLAG JR CRT20 ; LOOP UNTIL WE GET A CHARACTER CRT10: IN A,(SIOBD0) ; FETCH THE CHARACTER AND 7FH ; STRIP OFF PARITY BIT POP BC RET ; OUTPUT A CHARACTER TO THE CONSOLE. ; ENTRY: C=CHARACTER TO BE OOUTPUT ROUTINE FOR STANDARD ; CRT TERMINAL DEVICE, SIO ; CHANNEL B. CRTOUT: IN A,(SIOBC0) ; CHECK STATUS OF TRANSMITTER BIT TRXRDY,A ; TRANSMITTER BUFFER EMPTY? JR Z,CRTOUT ; NOT YET. LD A,C ; TRANSFER THE CHARACTER OUT (SIOBD0),A ; OUTPUT THTYOUT ; TELETYPE OUTPUT DEFW PTPPUN ; HIGH SPEED PUNCH DEVICE DEFW UP1PUN ; USER DEFINED PUNCH #1 DEFW UP2PUN ; USER DEFINED PUNCH #2 ; SEND A CHARACTER TO THE PARALLEL PORT. ; THIS PORT HAS A STANDARD CENTRONICS INTERFACE. ; ENTRY: C=CHARA A,(PIOAD) ; READ PRINTER CONTROL LINES RES STROBE,A ; PULSE THE STROBE LINE OUT (PIOAD),A ; TO INDICATE THAT DATA IS IN A,(PIOAD) ; VALID IN CHANNEL B DATA PORT SET STROBE,A ; RAISE STROBE LINE AGAIN OUT (PIOAD),A ; COMPLETE STROBE SIGNAL RET STATUS COMMAND OUT (SIOBC1),A ; SEND OUT IN A,(SIOBC1) ; READ SIO STATUS AND 00100100B ; CHECK TRANSMITT READY AND CTS CP 00100100B ; READY TO SEND? JR Z,TTYS1 ; YES, CODE FOR SET READY CONDITION XOR A ; NO, SET NOT READY CONDITION RET T ; CONSOLE BATCH DEVICE DEFW UC1IN ; USER DEFINED CONSOLE ; JUST RETURN FOR NOW TTYIN: RET ; CONSOLE INPUT ROUTINE FOR ; STANDARD CRT TERMINAL DEVICE. ; SIO CHANNEL B. ; MOTOR AND LIGHT OFF IN HALF A SECOND ; WHEN THERE IS NO INPUT ON CONSOUTPUT CONOUT: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 0 ; CONSOLE POSITION IN IOBYTE DEFW TTYOUT ; CONSOLE PRINTER DEVICE DEFW CRTOUT ; CONSOLE CRT DEVICE DEFW BATOUT ; CONSOLE BATCH DEVICE DEFW UC1OUT ; USER DEFINED CONSOLE ; E CHARACTER TO SIO RET ; PAPER TAPE READER ROUTINE, ; MOSTLY UNUSED. READER: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 2 ; POSITION OF READER IN IOBYTE DEFW TTYIN ; STANDARD TELETYPE DEVICE DEFW PTRRDR ; HIGH SPEED PAPER TAPE READERCTER TO BE OUTPUT LIST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 6 ; LIST POSITION IN IOBYTE DEFW TTYOUT ; OUTPUT TO TELETYPE DEVICE DEFW CRTOUT ; OUTPUT TO CRT DEVICE DEFW LPTLST ; LINE PRINTER DEVICE DEFW UL1LST ; USER DEFINED PR ; HERE IS THE SERIAL PRINTER DRIVER, WHICH EXPECTS ; THE DEVICE ON THE OTHER END TO SUPPORT AN ETX/ACK ; PROTOCOL. PORT USED IS SIO CHANNEL A. UL1LST: LD A,(UL1SIZ) ; SIZE OF PRINTER BUFFER. LD B,A ; FOR LATER. OR A ; CLEAR CARRY RRA "    ; DIVIDE BY 2 LD E,A ; E <- UL1SIZ/2 LD HL,UL1CNT ; CURRENT BUFFER COUNT INC (HL) ; BUMP IT. UL1L10: IN A,(SIOBC1) ; READ STATUS BIT RCVRDY,A ; DO WE HAVE AN INPUT CHARACTER? JR Z,UL1L20 ; NO. SEND CHARACTER. IN A,(SIOBD1) ; GRAB THE CL30 ; FULL, SO SEND ANOTHER ETX JR C,UL1L10 ; OVERFLOW, WAIT FOR ACK. UL1L50: IN A,(SIOBC1) ; THIS IS THE REAL OUTPUT BIT TRXRDY,A ; ROUTINE AND EXIT JR Z,UL1L50 ; LOOP UNTIL TRANSMITTER READY. LD A,C ; CHARACTER HAS BEEN IN REG. C AND 7FH  DEFB 6 ; LIST POSITION IN IOBYTE DEFW TTYST ; STATUS OF TELETYPE DEVICE DEFW CRTST ; STATUS OF CRT DEVICE DEFW LPTLSS ; STATUS OF LINE PRINTER DEVICE DEFW UL1LSS ; STATUS OF USER DEFINED PRINTING DEVICE ; PARALLEL PRINTER STATUS CHECK. UL1 DEVICE. UL1LSS: LD HL,UL1CNT ; CURRENT BUFFER COUNT LD A,(UL1SIZ) ; MAX COUNT. CP (HL) ; ROOM FOR MORE CHARACTER? LD A,0FFH ; ANTICIPATE AFFIRMATIVE. RET NZ ; LISTER IS READY. IN A,(SIOBC1) ; OTHERWISE SEE IF WE HAVE BIT RCVRDY,A A,1AH ; RETURN EOF. RET ; DUMMY CONSOLE STATUS ROUTINES BATST: UC1ST: XOR A ; ALWAYS BUSY RET ; END OF 802FCONS.MAC NE ; ACCEPTS: C = DRIVE SELECT (WITH C=0 FOR SELECT DRIVE"A") ; RETURNS: HL = DPB POINTER OF DRIVE SELECT (IF C=VALID DRIVE NUMBER) ; HL = 0H IF (C=INVALID DRIVE NUMBER) SELDSK: LD HL,0 ; SET HL = ERROR RETURN CODE LD A,C LD (SEKDSK),A HARACTER. AND 7FH ; STIP PARITY. CP ASCACK ; IS IT ACK? JR Z,UL1L60 ; YES, PROCESS IT. UL1L20: LD A,E ; GET UL1SIZ/2 CP (HL) ; IS BUFFER HALF-FULL? JR NZ,UL1L40 ; NO, NO NEED FOR ETX. UL1L30: IN A,(SIOBC1) ; PREPARE FOR OUTPUT. BIT TRX; ALL THIS TIME. STRIP PARITY. OUT (SIOBD1),A ; SHIP IT! RET ; ONLY EXIT POINT. UL1L60: LD A,(HL) ; DID WE EVER SEND AN ETX? SUB E ; I.E., IS BUFFER > = HALF FULL? JR Z,UL1L70 ; YES. JR C,UL1L50 ; NO, SPURIOUS ACK. UL1L70: LD (HL),A ; ; RETURNS PRINTER NOT READY BECAUSE: ; 1) IT IS OUT OF PAPER ; 2) IT IS BUSY ; 3) A FAULT OCCURED LPTLSS: IN A,(PIOAD) ; READ PRINTER STATUS ; AND PIOMSK ; MASK OFF DON'T CARE BITS ; XOR PIOERR ; ERROR MASK, PRINTER READY? ; JR NZ,LPTS10 ; NO; AN INPUT CHARACTER READY. LD A,0FFH ; ANTICIPATE AFFIRMATIVE AGAIN. RET NZ ; WE ARE ASSUMING CHAR. IS AN ACK. XOR A ; WE MUST NOT BE READY YET RET ; FOLLOWING IS JUST A GENERAL-PURPOSE ; DUMMY ROUTINE, USED FOR UNDEFINED BIOS ; HOOKS, K SHIFT FACTOR DEFB BLM0 ; BLOCK MASK DEFB EXM0 ; EXTENT MASK DEFW DSM0 ; DETERMINES TOTAL STORAGE CAPACITY DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY DEFB ALH0 ; HIGH ORDER BYTE OF ABOVE ; SAVE DRIVE NUMBER CP MAXDRV+1 ; CHECK FOR VALID DRIVE RET NC ; EXIT WITH HL = 0H ; DRIVE NUMBER IS IN PROPER RANGE LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ; MULTIPLY BY 16 LD DE,DPBASE ; BASE OF PARAMETER BLOCK ADRDY,A ; CAN WE OUTPUT? JR Z,UL1L30 ; NOT YET. LD A,ASCETX ; SEND OFF THE END-OF- OUT (SIOBD1),A ; BLOCK CHARACTER. JR UL1L50 ; NOW OUTPUT THE CHARACTER UL1L40: LD A,B ; ORIGINAL BUFFER SIZE CP (HL) ; CHECK FOR FULL AND OVERFLOW. JR Z,UL1 ADJUST THE BUFFER COUNT JR UL1L50 ; AND SEND THE CHARACTER. ; TEST THE STATUS OF THE PRINTER. ; THEN RETURN NOT READY FLAG. ; EXIT: A=0 -> PRINTER IS NOT READY ; A=0FFH -> PRINTER IS READY LISTST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE. ; DEC A ; YES, RETURN FF IN A BIT PRTBSY,A ; TEST PRINTER BUSY BIT LD A,0 RET NZ CPL ; SET A = FFH AND ZERO FLAG = 1 RET LPTS10: XOR A ; INDICATE NOT READY RET ; BY RETURNING 0 IN A ; CHECK THE STATUS OF SERIAL PRINTER, ; CP/MAND UNUSED IOBYTE DRIVERS. UNUSED: RET ; JUST RETURN FOR NOW ; PAPER TAPE READER, PUNCH AND CONSOLE ; DUMMY ROUTINES. USER MAY FILL OUT LATER. BATIN: UC1IN: BATOUT: UC1OUT: PTRRDR: UR1RDR: UR2RDR: PTPPUN: UP1PUN: UP2PUN: LD  ; HOME THE HEADS TO TRACK 0 HOME: LD A,(HSTWRT) ; CHECK WRITE PENDING DATA IN BUFFER OR A JR NZ,HOMED ; IF WRITE DATA PENDING THEN SKIP LD (HSTACT),A HOMED: XOR A LD (SEKTRK),A ; RESET SEEK TRACK TO ZERO RET ; DISK SELECT ENTRY ROUTID HL,DE ; HL=.DPB(CURDSK) RET ; SETTRK -- SET READ/WRITE TRACK ; ACCEPTS: C = TRACK NUMBER SETTRK: LD A,C LD (SEKTRK),A RET ; SETSEC -- SET READ/WRITE SECTOR ; ACCEPTS: C = SECTOR NUMBER SETSEC: LD A,C LD (SEKSEC),A RET ; SETDMA#    -- SET READ/WRITE DMA BUFFER ADDRESS SETDMA: LD (DMAADR),BC RET ; SECTRAN -- TRANSLATE SECTOR ; ACCEPTS: BC = LOGICAL SECTOR ; DE = TRANSLATIN TABLE ADDRESS ; RETURNS: HL = PHYSICAL SECTOR SECTRN: LD H,B LD L,C RET ; READ CP/M SEC WRUAL ; WRITE UNALLOCATED? JR NZ,WRIT10 ; CHECK FOR UNALLOC ; WRITING TO AN UNALLOCATED BLOCK LD A,BLKSIZ/128 ; NUMBER OF SECTORS/BLOCK LD (UNACNT),A ; UNALLOCATED SECTORS REMAINING LD A,(SEKDSK) ; CP/M DRIVE. LD (UNADSK),A ; TO UNALLOCATE LD HL,UNATRK ; UNALLOCATED TRACK NO. CP (HL) ; SEEK.TRK = UNALL.TRK? JR NZ,WRIT30 ; SKIP IF NOT ; TRACKS ARE THE SAME LD A,(SEKSEC) ; GET SEEK SECTOR INTO A LD HL,UNASEC CP (HL) ; SEEK.SEC = UNALL.SEC? JR NZ,WRIT30 ; SKIP IF NOT ; LD (UNACNT),A ; RESET UNALLOC. COUNTER = 0 INC A LD (RSFLAG),A ; SET PRE-READ FLAG = YES. ; COMMON CODE FOR READ AND WRITE ROUTINE RDWTCM: XOR A LD (ERFLAG),A ; RESET ERROR FLAG LD A,(SEKSEC) ; CONVERT SEEEK SECTOR TO HOST SECTOR OR A ; CLHST) LD HL,HSTSEC CP (HL) JR Z,RDWT40 ; SKIP IF MATCH ; PROPER DISK, BUT NOT CORRECT SECTOR RDWT10: LD A,(HSTWRT) ; WRITE DATA PENDING IN BUFFER? OR A JR Z,RDWT20 ; NO NEED TO FLUSH BUFFER CALL WRITEHST ; IF YES, THEN WRITE DATA TO DISK E HOST BUFFER ADDRESS AND SECMSK LD H,A LD L,0 SRL H RR L ; HL = ((SEKSEC)&SECMSK)*128 ; HL HAS RELATIVE HOST BUFFER ADDRESS LD DE,HSTBUF ADD HL,DE LD DE,(DMAADR) ; GET/PUT CP/M DATA BUFFER POINTER LD BC,128 ; SET BC = LENGTH TO MOTOR ENTRY POINT ; THIS ROUTINE READ THE SELECTED CP/M SECTOR ; INTO SELECTED DMA BUFFER POINTER READ: XOR A LD (UNACNT),A LD A,1 LD (READOP),A ; SET READ OPERATION LD (RSFLAG),A ; MUST READ DATA LD A,WRUAL LD (WRTYPE),A ; TREAT AS UNALD DISK LD A,(SEKTRK) ; CP/M TRACK NO. LD (UNATRK),A LD A,(SEKSEC) ; CP/M SECTOR NO. LD (UNASEC),A ; CHECK FOR WRITE TO UNALLOCATED SECTOR WRIT10: LD A,(UNACNT) ; ANY UNALLOCATED SECTOR REMAIN? OR A JR Z,WRIT30 ; SKIP IF NOT ; MORE UNALMATCH, MOVE "UNASEC" TO NEXT SECTOR FOR FUTURE REF. INC (HL) ; UNASEC = UNASEC+1 LD A,(HL) CP CPMSPT ; CHECK END OF SECTOR IN CUR.TRACK? JR C,WRIT20 ; SKIP IF NO OVERFLOW ; OVERFLOW TO NEXT TRACK LD (HL),0 ; RESET SECTOR LD A,(UNATRK)EAR CARRY FLAG RRA LD (SEKHST),A ; TEMPORARY SECTOR NO. ; ACTIVE HOST SECTOR? LD HL,HSTACT LD A,(HL) LD (HL),1 ; ALWAY BECOMES 1 OR A JR Z,RDWT20 ; FILL BUFFER IN ACTIVE FLAG = 0 ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER? LD A,(S RET NZ ; ERROR IN WRITING TO DISK. ; MAY HAVE TO PRE-READ DATA TO HOST BUFFER RDWT20: LD A,(SEKDSK) LD (HSTDSK),A LD A,(SEKTRK) LD (HSTTRK),A LD A,(SEKHST) LD (HSTSEC),A LD A,(RSFLAG) ; CHECK BUFFER REQUIRES PRE-READ OR A JR Z,RDWT3VE LD A,(READOP) ; WHICH WAY? OR A JR NZ,RDWT50 ; SKIP IF READ OPERATION ; WRITE OPERATION, MARK AND SWITCH DIRECTION LD A,1 LD (HSTWRT),A ; SET WRITE PENDING FLAG ON EX DE,HL ; SOURCE/DESTINATION POINTERS SWAP ; BC INITIALLY 128, DE DLOC JP RDWTCM ; PERFORM THE READ ; WRITE ROUTINE ENTRY POINT ; THIS ROUTINE WRITE THE SELECTED DMA BUUFER POINTER ; INTO SELECTED CP/M SECTOR WRITE: XOR A LD (READOP),A ; SET OPERATION TO WRITE LD A,C ; SAVE WRITE TYPE LD (WRTYPE),A CPLOCATED SECTORS IN THIS BLOCK DEC A ; UNACNT = UNACNT-1 LD (UNACNT),A LD A,(SEKDSK) ; GET SEEK DISK INTO A LD HL,UNADSK CP (HL) ; SEEK.DSK = UNALL.DSK? JR NZ,WRIT30 ; SKIP IF NOT ; DISKS ARE THE SAME LD A,(SEKTRK) ; CP/M TRACK NO.  INC A LD (UNATRK),A ; UNATRK = UNATRK+1 ; MATCH FOUND, MARK AS UNNECESSARY READ WRIT20: XOR A LD (RSFLAG),A ; SET PRE-READ FLAG = NO JR RDWTCM ; PERFORM WRITE CP/M SECTOR ; NOT AN UNALLOCATED SECTOR, REQUIRES PRE-READ WRIT30: XOR A EKDSK) LD HL,HSTDSK CP (HL) ; SAME DISK? JR NZ,RDWT10 ; SKIP IF NOT MATCH ; SAME DISK, SAME TRACK? LD A,(SEKTRK) LD HL,HSTTRK CP (HL) ; SAME TRACK? JR NZ,RDWT10 ; SKIP IF NOT MATCH ; SAME DISK, SAME TRACK, SAME BUFFER? LD A,(SEK0 ; NO PRE-READ REQUIRED CALL READHST ; IF YES, THEN READ DATA FROM DISK RET NZ ; ERROR IN READING RDWT30: XOR A ; INTO BUFFER. LD (HSTWRT),A ; RESET PENDING WRITE FLAG ; COPY DATA TO OR FROM BUFFER RDWT40: LD A,(SEKSEC) ; COMPUTE RELATIVESTINATION, HL IS SOURCE POINTER RDWT50: LDIR ; DATA HAS BEEN MOVE TO/FROM HOST BUFFER LD A,(WRTYPE) ; CHECK WRITE TYPE OPERATION CP WRDIR ; DIRECTORY WRITE? JR Z,RDWT60 ; IF NOT A DIRECTORY WRITE THEN EXIT LD A,(ERFLAG) ; WITH ERROR FLAG #   =0, AND Z=1 OR A RET ; ALWAYS FLUSH A DIRECTORY BUFFER RDWT60: XOR A LD (HSTWRT),A ; RESET WRITE PENDING FLAG CALL WRITEHST RET ; HERE ARE THE SECTOR READ/WRITE FUNCTIONS. WE ; WANT TO READ/WRITE TO DISK USING THE PARAMETERS ; SECTOR, 10 ; NO. OF RETRIES LD (RETRY),A ; ON DISK I/O OPERATION RWHS10: LD HL,(DMATAB) ; GET DMA INITIALIZE PARAMETER POINTER CALL PRTINI ; DO DMA INITIALIZATION. CALL SEEK ; SEEK THE USER DEFINED TRACK JR NZ,RWHS20 ; ADJUST RETRY COUNTER LD A,(CO OR A JR Z,RWHS30 ; ALL DONE, WE FAILED. CALL RESTOR ; SEEK TRACK 0. JR RWHS10 ; LOOP BACK FOR ANOTHER SHOT. RWHS30: CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE LD A,(ERFLAG) ; RETURN ERROR OR A ; SET/CLEAR Z FLAG. RET ; END OF 802FTEST THE STATUS OF THE PRINTER. ; THEN RETURN NOT READY FLAG. ; EXIT: A=0 -> PRINTER IS NOT READY ; A=0FFH -> PRINTER IS READY LISTST: CALL IODISP ; DIRECT I/O TO PROPER DEVICE DEFB 6 ; LIST POSITION IN IOBYTE DEFW TTYST ; STATUS OF TELETYP. LD A,SEECMD ; THIS IS THE SEEK COMMAND OUT (FDCCMD),A ; GIVE THE ORDER TO FDC ; NOW TEST FOR COMPLETION CALL WAIT ; WAIT UNTIL NOT BUSY AND SEEMSK ; AND OUT TRACK 0 BIT RET ; MAY HAVE FAILED ; THIS ROUTINE LOOPS UNTIL THE FDC IS ; E IT FOR LATER--3.25 BIT FDCRDY,A ; IS THE DEVICE NOT READY?--2.00 JR NZ,WAIT50 ; YES, THIS IS AN ERROR--1.25 PUSH AF ; SAVE REGISTERS--2.75 LD A,(JMPSW) ; GET MESSAGE FLAG--3.25 CP 0 ; MESSAGE ALREADY SENT OUT?--1.75 JR NZ,WAIT30 ; YES, SKTRACK, DMA ADDRESS. READHST: LD A,RDSCMD ; FDC READ COMMAND LD HL,RDSTAB ; DMA INITIALIZATION TABLE JR RWHSEC ; CODE COMMON TO READ AND WRITE WRITEHST: LD A,WTSCMD ; FDC WRITE COMMAND LD HL,WTSTAB ; DMA INITIALIZATION TABLE FOR WRITE RWMAND) ; SET UP FDC OUT (FDCCMD),A ; COMMAND REGISTER CALL WAIT ; WAIT FOR CONTROLLER NOT BUSY JR NZ,RWHS20 ; ERROR ON READ/WRITE LD A,(ERFLAG) ; RETURN CODE OR A ; SET/CLEAR Z FLAG RET ; DISK I/O SUCCESSFUL ; WE HAD AN ERROR ON READ/WRITDISK.MAC  CALL ERRPRT ; PRINT DETAILED ERROR MESSAGE LD A,(ERFLAG) ; RETURN ERROR OR A ; SET/CLEAR Z FLAG. RET ; END OF 802F ; THIS ROUTINE DOES THE ACTUAL SEEKING. SEEK: LD HL,TRKTAB ; CURRENT TRACK TABLE LD A,(HSTDSK) ; CURRENT DRIVE LD C,A ; MAKE IT AN INDEX INTO LD B,0 ; TRACK TABLE ADD HL,BC ; ADD IN INDEX LD A,(HL) ; PULL OUT THE TRACK FOR THIS DRIVE OIN A NON-BUSY STATE, OR UNTIL A NOT- ; READY CONDITION IS DETECTED. TIME-OUT ; FOR DRIVE BUSY OCCURS AT APPROX. ; 1.5 SECONDS AFTER COMMAND ; INITIATION. WAIT: LD A,15 ; WE MUST DELAY ABOUT WAIT10: DEC A ; 60 USECS. BEFORE READING JR NZ,WAIT1IP--1.75 DEC BC ; COUNT DOWN--1.50 LD A,B ; --2.25 OR C ; TIME OUT?--1.00 CALL Z,SIGMSG ; YES, PRINT MESSAGE--2.50 WAIT40: POP AF ; RESTORE REGISTERS--2.50 BIT FDCBSY,A ; ARE WE PROCESSING A COMMAND?--2.00 JR NZ,WAIT20 ; NO, RETURN ERRORHSEC: LD (COMAND),A LD (DMATAB),HL LD A,(HSTDSK) LD HL,DRIVE ; CURRENT DRIVE CP (HL) ; SAME DRIVE? CALL NZ,SELDRV ; NO, HARDWARE SELECT THE DRIVE CALL SELSID ; SELECT THE PROPER SIDE ; READY TO READ OR WRITE A PHYSICAL SECTOR LD A,E OPERATION RWHS20: CALL RESDMA ; RESET THE DMA ON ABORT LD A,(ERFLAG) ; IF DRIVE NOT READY, BIT FDCRDY,A ; DON'T BOTHER WITH RETRIES RET NZ ; RETURN ERROR FLAG IN A LD HL,RETRY ; MORE RETRIES LEFT? LD A,(HL) DEC (HL) ; BUMP DOWN COUNT NLY EXIT POINT. UL1L60: LD A,(HL) ; DID WE EVER SEND AN ETX? SUB E ; I.E., IS BUFFER > = HALF FULL? JR Z,UL1L70 ; YES. JR C,UL1L50 ; NO, SPURIOUS ACK. UL1L70: LD (HL),A ; ADJUST THE BUFFER COUNT JR UL1L50 ; AND SEND THE CHARACTER. ; UT (FDCTRK),A ; SEND IT TO THE CONTROLLER LD B,A ; SAVE FOR LATER LD A,(HSTTRK) ; GET THE SOUGHT-AFTER TRACK. LD (HL),A ; PLACE IT IN TRACK TABLE CP B ; SAME TRACK? RET Z ; YES, NO NEED TO SEEK OUT (FDCDAT),A ; AND GIVE IT TO THE CONTROLLER0 ; THE STATUS. LD (TEMPBC),BC ; SAVE REGISTERS LD (TEMPDE),DE LD (TEMPHL),HL LD BC,0C000H ; TIME OUT FOR 1.25 SECONDS LD A,0 LD (JMPSW),A ; RESET THE FLAG FOR MESSAGE WAIT20: IN A,(FDCCMD) ; READ THE FDC STATUS--2.75 LD (ERFLAG),A ; SAV CODE--3.00 LD (UNMSTA),A ; UNMASKED STATUS (FOR DEBUG) AND ERRMSK ; MASK OFF NON-ERROR BITS LD (ERFLAG),A ; SAVE STATUS FOR LATER WAIT50: LD HL,(TEMPHL) ; RESTORE REGISTERS LD DE,(TEMPDE) LD BC,(TEMPBC) RET WAIT30: CALL CONST ; CONSO$   LE STATUS CP 0 ; AVAILABLE INPUT? JR Z,WAIT40 ; NO, SKIP CALL CONIN ; GET CHARACTER CP 03H ; CONTROL-C? JR NZ,WAIT40 ; NO, LOOP BACK POP AF ; RESTORE REGISTERS LD HL,(TEMPHL) LD DE,(TEMPDE) LD BC,(TEMPBC) LD A,FRCCMD ; FORCE TERL SECTOR NO. IN HSTSEC. ; GO AHEAD AND SET THE FDC SECTOR ; REGISTER. SELSID: LD A,(FDDBYT) ; GET THE DRIVE SELECT LATCH IN MEMORY LD C,A ; HOLD IT IN C FOR A BIT. RES 2,C ; CHOOSE SIDE 0, FOR NOW. LD A,(HSTSEC) ; GET THE LOGICAL HOST SECTOR BC,40000 ; NEEDS DELAY FOR ABOUT 300MSEC SELS20: DEC BC ; COUNT DOWN LD A,B OR C ; REACHED ZERO YET? JR NZ,SELS20 ; NO, LOOP BACK RET ; ALL DONE. ; SELECT THE DRIVE IN HARDWARE. ; DRIVE TO BE SELECTED IS PASSED ; IN REGISTER A. SELDRV: ; RESET THE DISK SUBSYSTEM BY RESTORING ; ALL THE HEADS TO TRACK 0. RESTORING ; DRIVES IN REVERSE ORDER ASSURES THAT ; DRIVE A WILL ALWAYS BE SELECTED UPON ; COMPLETION. RESDSK: LD A,00000010B ; INITIALIZE THE FDD LATCH, MOTOR ON LD (FDDBYT),A DRIVE ALSO. RESTOR: LD A,(HSTDSK) ; GET THE CURRENT DRIVE LD HL,TRKTAB ; BASE ADDRESS OF CURRENT TRACK TABLE LD E,A LD D,0 ; MAKE DRIVE NO. AN INDEX. ADD HL,DE ; ADD IN INDEX. LD (HL),0 ; CLEAR CURRENT TRACK TO 0. LD A,RESCMD ; FDC RESTORCALL CRTOUT ; OUTPUT IT INC HL JR PRTMSG ; AND LOOP BACK ; GENERAL PORT INITIALIZATION ROUTINE ; ENTRY: HL -> PORT ADDRESS ; BYTE COUNT ; DATA ; | ; | PRTINI: LD C,(HL) ; GET PORT ADDRESS INC HL PRTENT: LD B,(HL) MINATE OUT (FDCCMD),A OUT (FDCCMD),A CALL RESDMA ; RESET DMA LD A,0 LD (DEFDSK),A ; SET DEFAULT DRIVE TO A JP WBOOT ; WARM-BOOT ; THIS ROUTINE PRINTS DOOR MESSAGE WHEN THERE IS AN ACCESS TO ; A DRIVE WITH DOOR OPENED SIGMSG: LD A,1 ;  CP PSPT0 ; SECTOR >= THAN MAXIMUM SECTOR? JR C,SELS10 ; IF NOT THEN SELECT SIDE 0 SET 2,C ; CHOOSE SIDE 1. SUB PSPT0 ; DE-BIAS SECTOR NO. SELS10: INC A ; PHYSICAL SECTORS HAVE ORIGIN 1 OUT (FDCSEC),A ; SEND SECTOR TO CONTROLLER LD (TSEC) LD (HL),A ; SAVE CURRENT DRIVE FOR LATER LD C,00010000B ; THIS IS THE MASK FOR DRIVE 0 SELD10: OR A ; HAVE WE GOT THE RIGHT MASK? JR Z,SELD20 ; YES. SLA C ; SHIFT DRIVE MASK OVER 1 BIT LEFT. DEC A ; DOWN THE COUNTER. JR SELD10 ; AND LOOP; MEMORY IMAGE. OUT (FDD),A ; HARDWARE LATCH. LD B,MAXDRV ; INITIAL DRIVE NO. RESD10: LD A,B ; SELECT THE DRIVE LD (HSTDSK),A ; STORE IT IN HSTDSK LD HL,DRIVE CALL SELDRV CALL RESTOR ; RESTORE THE HEADS TO TRACK 0 DEC B ; DECREMENT DRIE COMMAND OUT (FDCCMD),A ; SEND IT. CALL WAIT ; WAIT FOR COMPLETION RET ; RESET THE DMA SIX TIMES TOTAL RESDMA: PUSH BC ; DON'T DESTROY REGGIES LD B,6 ; COUNTER RDMA10: LD A,11000011B ; RESET THE DMA OUT (DMA),A ; SO THAT IT DOESN'T RU; GET THE COUNT INC HL ; POINT TO FIRST DATA BYTE OTIR ; BLOCK OUTPUT RET ; ADDITIONAL HARWARE SYSTEM ; HARDWARE INITIALIZATION ; COMES NEXT. HDWINI: CALL RESDSK ; RESET THE DISK SUBSYSTEM LD HL,SIOTAB ; INITIALIZE SIO #1 FOR SERIAL PSET FLAG LD (JMPSW),A LD A,(HSTDSK) ; CURRENT DRIVE ADD A,41H ; MAKE IT ASCII LD (VDRIVE),A ; SAVE FOR LATER LD HL,RDYMSG ; PRINT DOOR MESSAGE CALL PRTMSG RET ; SELECT THE PROPER SIDE OF THE ; DISKETTE TO SEEK, DEPENDING ON ; THE LOGICA,A ; SAVE FOR LATER LD A,C ; GET NEW SIDE. LD (FDDBYT),A ; RESTORE IT TO THE MEMORY IMAGE OUT (FDD),A ; AND LATCH LD A,(MOTFLG) ; MOTOR ON-OFF FLAG CP 0 ; MOTOR OFF? RET NZ ; NO, SKIP DELAY LD A,1 LD (MOTFLG),A ; SET MOTOR ON FLAG LD . SELD20: LD A,(FDDBYT) ; GET MEMORY IMAGE OF DRIVE LATCH AND 00001111B ; AND OFF CURRENT DRIVE SELECT BITS. OR C ; OUT WITH THE OLD, IN WITH THE NEW LD (FDDBYT),A ; RESTORE MEMORY IMAGE. OUT (FDD),A ; AND INFORM LATCH ABOUT NEW DRIVE. RET VE NO. JP P,RESD10 ; LOOP FOR NEXT DRIVE RET ; RESTORE THE HEADS ON THE CURRENTLY ; SELECTED DRIVE TO TRACK 0. THIS IS ; DONE AFTER EACH SEEK, READ, OR, WRITE ; FAILURE. ALSO AT WARM AND COLD BOOT. ; WE MUST RESET THE CURRENT TRACK FOR ; THIS N ON. DJNZ RDMA10 ; LOOP FOR ANOTHER TIME POP BC ; RESTORE REGISTER PAIR RET ; ALL DONE ; MISCELANEOUS ROUTINES ; PRINT THE STRING POINTED TO BY HL ; AND TERMINATED BY NULL (0). PRTMSG: LD A,(HL) OR A RET Z ; ALL DONE LD C,A RINTER CALL PRTINI ; BAUD RATE IS SET UP IN PROM CODE ; BY READING THE DIP SWITCH RET ; MAY BE MORE LATER ; THIS ROUTINE TRANSFERS CONTROL TO ; THE I/O DRIVER INDICATED BY THE ; APPROPRIATE BITS IN IOBYTE (0003H). ; ENTRY: HL -> ; ; ; ; IODISP: POP HL ; GET DISPATCH TABLE POINTER PUSH BC ; SAVE PERTINENT REGISTERS PUSH DE LD A,(HL) ; DEVICE TYPE INC HL ; ADVANCE POINTER RS POP BC JP (HL) ; OFF WE GO, INTO THE WILD BLUE YONDER! ; THIS ROUTINE FILLS OUT THE DETAILED ERROR MESSAGE TABLE ; OBTAINING VARIABLE VALUES FROM CURRENT STATE. ; THEN CALLS PRTMSG ROUTINE WITH THE TABLE ADDRESS IN HL ERRPRT: LD A,(COMAND) NE LD HL,VSEC ; SECTOR VARIABLE LD A,(TSEC) ; CURRENT TARGET SECTOR CALL FTAB LD HL,VSTAT ; ERROR STATUS LD A,(ERFLAG) ; GET ERROR FLAG CALL FTAB LD HL,ERRMSG ; ERROR MESSAGE TABLE ADDRESS CALL PRTMSG RET ; THIS ROUTINE CONVERTS HEX C ERIC? JR NC,G10 ; YES, SKIP FOR ALPHA ADD A,'0' ; ADD 30 RET G10: ADD A,'A'-10 ; ADD 40 RET ; END OF 802FSUBS.MAC 0EH ; CHANNEL A CONTROL PORT SIOBD0 EQU 0DH ; CHANNEL B DATA PORT FOR SIO 0 SIOBC0 EQU 0FH ; CHANNEL B CONTROL PORT ; SIO #1 PORT DEFINITIONS ; CHANNEL B FOR PRINTER SIOAD1 EQU 20H ; CHANNEL A DATA PORT FOR SIO 1 SIOAC1 EQU 22H ; CHANNEL A CLD B,A ; SAVE DEVICE TYPE FOR LATER OR A ; WHICH DEVICE? LD A,(IOBYTE) ; RETREIVE CURRENT IOBYTE JR Z,IODI20 ; NO SHIFTING NEEDED IODI10: RRA ; ROTATE BYTE UNTIL DEVICE BITS DJNZ IODI10 ; ARE LINED UP WITH BIT 0 IODI20: AND 03H ; MASK O; CURRENT COMMAND CP 80H ; READ? JR NZ,WRMSG ; NO, SKIP LD HL,RMSG ; READ MESSAGE JR ERR10 WRMSG: LD HL,WMSG ; WRITE MESSAGE ERR10: LD DE,VCMD ; COMMAND MESSAGE ADDRESS IN TABLE LD BC,5 LDIR ; STORE IN TABLE LD HL,VSIDE ; SIDE VARIABLODE INTO ASCII AND FILL OUT THE TABLE FTAB: PUSH AF ; SAVE REGISTERS RRCA ; ROTATE RIGHT 4 TIMES RRCA RRCA RRCA CALL GHEX ; CONVERT HIGH ORDER 4 BITS TO ASCII LD (HL),A ; STORE INTO TABLE INC HL ; NEXT TABLE LOCATION POP AF ; RESTONTROL PORT SIOBD1 EQU 21H ; CHANNEL B DATA PORT FOR SIO 1 SIOBC1 EQU 23H ; CHANNEL B CONTROL PORT ; CTC PORT DEFINITIONS CTC0 EQU 08H ; TERMINAL BAUD RATE GENERATOR CTC1 EQU 09H ; SERIAL PRINTER BAUD RATE GENERATOR CTC2 EQU 0AH ; REAL TIME FF DON'T CARE BITS RLA ; FORM WORD OFFSET LD C,A ; FORM 16 BITS, B ALREADY 0 ADD HL,BC ; ADD IN BASE ADDRESS LD E,(HL) ; TRANSFER DISPATCH ADDRESS INC HL ; TO REGISTERS DE LD D,(HL) EX DE,HL ; RESULT INTO HL POP DE ; RESTORE REGISTEE LD A,(FDDBYT) ; MEMORY IMAGE BIT 2,A ; SIDE BIT JR Z,ONE ; 0 - SIDE 1 LD (HL),32H ; ASCII 2 JR CONT10 ONE: LD (HL),31H ; ASCII 1 CONT10: LD HL,VTRK ; TRACK VARIABLE LD A,(HSTTRK) ; CURRENT TRACK NUMBER CALL FTAB ; FILL OUT TABLE ROUTIORE REGISTERS CALL GHEX LD (HL),A RET ; HEX INTO ASCII ROUTINE GHEX: AND 0FH ; STRIP HIGH 4 BITS CP 10 ; NUMERIC? JR NC,G10 ; YES, SKIP FOR ALPHA ADD A,'0' ; ADD 30 RET G10: ADD A,'A'-10 ; ADD 40 RET ; END OF 802FSUBS.MAC  ; BDOS CONSTANTS ON ENTRY TO WRITE WRALL EQU 0 ;WRITE TO ALLOCATED WRDIR EQU 1 ;WRITE TO DIRECTORY WRUAL EQU 2 ;WRITE TO UNALLOCATED ; SIO #0 PORT DEFINITIONS ; CHANNEL B FOR CRT SIOAD0 EQU 0CH ; CHANNEL A DATA PORT FOR SIO 0 SIOAC0 EQU CLOCK CHANNEL CTC3 EQU 0BH ; FLOPPY DISK INTERRUPT CHANNEL ; PIO PORT DEFINITIONS PIOAD EQU 1CH ; PIO CHANNEL A DATA PORT PIOAC EQU 1EH ; PIO CHANNEL A CONTROL PORT PIOBD EQU 1DH ; PIO CHANNEL B DATA PORT PIOBC EQU 1FH ; PIO CHANNEL B CONTRO%   L PORT ; SIO STATUS BIT DEFINITIONS RCVRDY EQU 0 ; RECEIVE CHARACTER AVAILABLE TRXRDY EQU 2 ; TRANSMITTER BUFFER EMPTY ; PIO CENTRONICS PRINTER INTERFACE DEFINITIONS STROBE EQU 0 ; PRINTER STROBE LINE PIOMSK EQU 00111000B ; MASK FOR READY, DMA PORT ADDRESS ; FDC STATUS BITS FDCBSY EQU 0 ; FDC BUSY IS BIT 0 FDCIND EQU 1 ; FDC INDEX HOLE DETECTED FDCTR0 EQU 2 ; FDC TRACK 0 DETECTED FDCCRC EQU 3 ; FDC CRC ERROR ENCOUNTERED FDCSEE EQU 4 ; FDC SEEK ERROR ENCOUNTERED FDCHLD EQU 5 D EQU 01110100B ; HEAD STEP OUT, TOWARD EDGE. RDSCMD EQU 10000000B ; READ SECTOR WTSCMD EQU 10100000B ; WRITE SECTOR RDACMD EQU 11000000B ; READ SECTOR ADDRESS RDTCMD EQU 11100000B ; READ TRACK WTTCMD EQU 11110000B ; WRITE TRACK FRCCMD EQU 11010000B  ; DISK PARAMETER BLOCKS. ; FIRST COME THE EQUATES ; FOR DISK PARAMETER BLOCKS BPDE EQU 32 ; BYTES/DIRECTORY ENTRY ; DRIVE 0 EQUATES OFF0 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD0 EQU 40 ; NUMBER OF TRACKS/DISK BPS0 EQU 256 ; 00B ; DIRECTORY BLOCK BIT MAP LOW ALH0 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS0 EQU (DRM0+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR ; DRIVE 1 EQUATES OFF1 EQU 2 ; NUMBER OF TRACK RESERVED FOR CP/M O.S. TPD1 EQU 40 ; NUMBER OF TRACKS/DISK BPS1 EQU 10000000B ; DIRECTORY BLOCK BIT MAP LOW ALH1 EQU 0B ; DIRECTORY BLOCK BIT MAP HIGH CKS1 EQU (DRM1+1)/4 ; SIZE OF DIRECTORY CHECK VECTOR ; CP/M HOST DISK CONSTANTS BLKSIZ EQU BLS0 ; CP/M ALLOCATION BLOCK SIZE HSTSIZ EQU BPS0 ; SYSTEM DISK SECT PAPER OUT, FAULT PIOERR EQU 00001000B ; ERROR STATE MASK PRTBSY EQU 05H ; PRINTER BUSY IS BIT #5 IN STATUS BYTE ; FDC EQUATES FDCCMD EQU 14H ; FDC STATUS AND COMMAND PORT FDCTRK EQU 15H ; FDC TRACK PORT FDCSEC EQU 16H ; FDC SECTOR PORT FDCD ; FDC HEAD LOAD ACK. FDCPRT EQU 6 ; FDC DISK IS WRITE PROTECTED FDCRDY EQU 7 ; FDC DISK NOT READY BIT ; FDC STATUS BYTE MASKS ERRMSK EQU 11011100B ; MASK OFF INSIGNIFICANT BITS SEEMSK EQU 10011000B ; CHECK THE NOT READY BIT DNRMSK EQU 10000000; FORCE TERMINATION ; ASCII EQUATES ASCETX EQU 03H ; ASCII END OF TRANSMISSION ASCACK EQU 06H ; ASCII ACKNOWLEDGEMENT ASCLF EQU 0AH ; ASCII LINE FEED ASCCR EQU 0DH ; ASCII CARRIAGE RETURN ; CP/M EQUATES CPMBUF EQU 80H ; DEFAULT CP/M DMANUMBER OF BYTES/SECTOR NSIDE0 EQU 2 ; NUMBER OF SIDE/DISK PSPT0 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK SPT0 EQU ((BPS0/128)*PSPT0)*NSIDE0 ;NUMBER OF CP/M SECTOR/TRACK SPD0 EQU SPT0*TPD0 ; NUMBER OF SECTORS/DISK EPD0 EQU 64 ; NUMBER OF DIRECTORY EU 256 ; NUMBER OF BYTES/SECTOR NSIDE1 EQU 2 ; NUMBER OF DISK SIDE PSPT1 EQU 18 ; NUMBER OF PHYSICAL SECTOR/TRACK SPT1 EQU ((BPS1/128)*PSPT1)*NSIDE1 ; NUMBER OF CP/M SECTORS/TRACK SPD1 EQU SPT1*TPD1 ; NUMBER OF SECTORS/DISK EPD1 EQU 64 ; NUMBER OF OR SIZE HSTSPT EQU PSPT0*NSIDE0 ; SYSTEM DISK SECTOR PER TRACK HSTBLK EQU HSTSIZ/128 ; CP/M SECTORS/HOST BUFFER CPMSPT EQU HSTBLK*HSTSPT ; CP/M SECTOR PER TRACK SECMSK EQU HSTBLK-1 ; SECTOR MASK MAXDRV EQU 1 ; MAXIMUM DRIVE NO. NODRVS EQU MAXDRV+1 ;AT EQU 17H ; FDC DATA PORT ; FLOPPY DRIVE SELECT LATCH FDD EQU 18H ; DRIVE SELECT LATCH ; SYSTEM PROM SWITCH ADDRESS PROMSW EQU 04H ; SYSTEM PROM DISABLE ADDRESS DEFDSK EQU 04H ; DEFAULT DRIVE NUMBER ; DMA PORT ADDRESS DMA EQU 10H ;B ; DRIVE NOT READY MASK ; FDC COMMAND BYTES RESCMD EQU 00000000B ; HOME HEAD COMMAND, NO VERIFY SEECMD EQU 00010100B ; SEEK TRACK COMMAND HDSCMD EQU 00110100B ; HEAD STEP, PREVIOUS DIRECTION HSICMD EQU 01010100B ; HEAD STEP IN, TOWARD HUB. HSOCM ADDRESS IOBYTE EQU 0003H LOGDRV EQU 0004H ; CURRENTLY LOGGED DRIVE ADDRESS JP EQU 0C3H ; JUMP OPCODE. RECLEN EQU 128 ; NO. OF BYTES IN CP/M RECORD (SECTOR). BDOSLN EQU 1600H ; LENGTH OF BDOS, IN BYTES. CCPLEN EQU 800H ; LENGTH OF CCP, IN BYTES NTRIES BLS0 EQU 2048 ; BLOCK SIZE BSH0 EQU 4 ; BLOCK SHIFT FACTOR BLM0 EQU (BLS0/128)-1 ; BLOCK MASK EXM0 EQU 0 ; EXTENT MASK DSM0 EQU ((SPD0-(SPT0*OFF0))/(BLM0+1))-1 ;CP/M BLOCK PER DISK DRM0 EQU EPD0-1 ; DIRECTORY ENTRIES - 1 ALL0 EQU 100000DIRECTORY ENTRIES BLS1 EQU 2048 ; BLOCK SIZE BSH1 EQU 4 ; BLOCK SHIFT FACTOR BLM1 EQU (BLS1/128)-1 ; BLOCK MASK EXM1 EQU 0 ; EXTENT MASK DSM1 EQU ((SPD1-(SPT1*OFF1))/(BLM0+1))-1 ; CP/M BLOCK PER DISK DRM1 EQU EPD1-1 ; DIRECTORY ENTRIES-1 ALL1 EQ NO. OF DRIVES IN SYSTEM NOTRYS EQU 10 ; NO. OF RETRIES ON SEEK, READ, WRITE. ; END OF 802FEQU.MAC TBLK*HSTSPT ; CP/M SECTOR PER TRACK SECMSK EQU HSTBLK-1 ; SECTOR MASK MAXDRV EQU 1 ; MAXIMUM DRIVE NO. NODRVS EQU MAXDRV+1 ;%    DEFW 0FFH ; DISK BUFFER - 1 DEFB 00111100B ; PORT A IS FIXED DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS DEFW HSTBUF ; ADDRESS OF DISK BUFFER DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK FER DEFB 10001010B ; READY ACTIVE HIGH, END OF BLOCK DEFB 11001111B ; LOAD REGISTERS DEFB 00000001B ; B -> A, TRANSFER MODE DEFB 11001111B ; LOAD REGISTERS DEFB 10000111B ; ARM THE DMA ; SIO INITIALIZATION TABLE FOR ; SERIAL PRINTER, 9600 BAUFB 01000111B ; COUNTER MODE, VALUE FOLLOWS DEFB 4 ; COUNTDOWN FOR 9600 BAUD ; MESSAGES, MESSAGES SIGNON: DEFB 0DH DEFB 0AH DEFB 'TELEVIDEO SYSTEM TS-802 V2.0' DEFB 0DH DEFB 0AH DEFM '62k CP/M vers 2.2' DEFB 0DH DEFB 0AH DEFB 0 ; TDEFM 'Check the disk in drive "' VDRIVE: DEFS 1 DEFM '", and close the door.' DEFB 0DH DEFB 0AH DEFB 0 ; TEMPORARY STORAGES FOR REGISTERS TEMPBC: DEFW 0 TEMPDE: DEFW 0 TEMPHL: DEFW 0 JMPSW: DEFB 0 ; FLAG FOR DOOR MESSAGE PRINT DRIVE: SK ALLOCATION SCRATCHPAD ; DRIVE 1 DISK PARAMETER HEADER HEAD1: DEFW 0 ; ADDR. OF SECTOR TRANSLATE TABLE FOR DISK 1 DEFW 0 ; BDOS SCRATCH WORDS DEFW 0 ; THREE OF THEM DEFW 0 DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK DEFW DPRMBDEFB 11001111B ; LOAD REGISTERS DEFB 00000101B ; A -> B, TRANSFER MODE DEFB 11001111B ; LOAD REGISTERS DEFB 10000111B ; ARM THE DMA WTSTAB: DEFB DMA ; PORT ADDRESS DEFB 15 ; TABLE COUNT DEFB 11000011B ; RESET THE DMA DEFB 01101101B ; PORTD, ; ETX/ACK PROTOCOL. SIOTAB: DEFB SIOBC1 ; PORT ADDRESS DEFB 8 ; TABLE SIZE DEFB 00011000B ; CHANNEL RESET DEFB 00011000B ; ANOTHER ONE DEFB 00010100B ; EXTERNAL STATUS RESET, POINT TO WR4 DEFB 01001100B ; X16 CLOCK, 2 STOP BITS DEFB 00ERMINATION BOOMSG: DEFB 0DH DEFB 0AH DEFM 'Boot Error.' ; ERROR ON WARM BOOT DEFB 0DH DEFB 0AH DEFB 0 ; DETAILED ERROR MESSAGE TABLE ERRMSG: DEFB 0DH DEFB 0AH VCMD: DEFS 5 ; COMMAND DEFB ' ERROR: SIDE# ' VSIDE: DEFS 1 ; SIDE DEDEFS 1 ; STORAGE FOR SAVING CURRENT DRIVE NO TSEC: DEFS 1 ; TARGET SECTOR MOTFLG: DEFB 1 ; MOTOR ON-OFF FLAG ; HERE ARE THE VERSION 2 DISK PARAMETER TABLES DPBASE: ; DRIVE 0 DISK PARAMETER HEADER HEAD0: DEFW 0 ; ADDR. OF SECTOR TRANSLATE 1 ; ADDR. OF DISK PARAMETER BLOCK 1 DEFW CHKSV1 ; ADDR. OF CHECK SCRATCHPAD DEFW ALOCV1 ; ADDR. OF DISK ALLOCATION SCRATCHPAD ; HERE ARE THE DISK PARAMETER BLOCKS DPRMB0: DPRMB1: DEFW SPT0 ; NO. OF SECTOR PER TRACK DEFB BSH0 ; BLOC ; DATA STORAGE ; DMA INITIALIZATION TABLES FOR READ ; AND WRITE OPERATIONS RDSTAB: DEFB DMA ; PORT ADDRESS DEFB 15 ; TABLE COUNT DEFB 11000011B ; RESET THE DMA DEFB 01101101B ; PORT ADDRESS FOLLOWS DEFB FDCDAT ; FDC DATA PORT ADDRESS  ADDRESS FOLLOWS DEFB FDCDAT ; FDC DATA PORT ADDRESS DEFW 0FFH ; DISK BUFFER - 1 DEFB 00111100B ; PORT A IS FIXED DEFB 00010000B ; PORT B IS MEMORY, INCREMENTS DEFB 11001101B ; PORT B MEMORY ADDRESS FOLLOWS DEFW HSTBUF ; ADDRESS OF DISK BUF000011B ; POINT TO WR3 DEFB 11000001B ; 8 BITS RX, RX ENABLE DEFB 00000101B ; POINT TO WR5 DEFB 11101010B ; DTR, 8 BITS TX, RTS, TX ENABLE ; CTC IS BAUD GENERATOR FOR ; SIO. CTCTAB: DEFB CTC1 ; PORT ADDRESS FOR CTC DEFB 2 ; TABLE SIZE DEFB ', TRACK# ' VTRK: DEFS 2 ; TRACK NUMBER DEFB ', SECTOR# ' VSEC: DEFS 2 ; SECTOR NUMBER DEFB ', FDC STATUS ' VSTAT: DEFS 2 ; ERROR STATUS DEFB 0 RMSG: DEFB 'READ ' WMSG: DEFB 'WRITE' ; DOOR MESSAGE TABLE RDYMSG: DEFB 0DH DEFB 0AH TABLE FOR DISK 0 DEFW 0 ; BDOS SCRATCH WORDS DEFW 0 ; THREE OF THEM DEFW 0 DEFW DIRBUF ; ADDR. OF DIRECTORY BUFFER FOR DISK DEFW DPRMB0 ; ADDR. OF DISK PARAMETER BLOCK 0 DEFW CHKSV0 ; ADDR. OF CHECK SCRATCHPAD DEFW ALOCV0 ; ADDR. OF DIK SHIFT FACTOR DEFB BLM0 ; BLOCK MASK DEFB EXM0 ; EXTENT MASK DEFW DSM0 ; DETERMINES TOTAL STORAGE CAPACITY DEFW DRM0 ; DETERMINES TOTAL NO. OF DIR. ENTRIES DEFB ALL0 ; BLOCK ALLOCATION FOR DIRECTORY DEFB ALH0 ; HIGH ORDER BYTE OF ABOVE &    DEFW CKS0 ; SIZE OF DIRECTORY CHECK VECTOR DEFW OFF0 ; NO. OF TRACKS RESERVED FOR SYSTEM ; MISCELLANEOUS INITIALIZED STORAGE UL1SIZ: DEFB 80H ; SIZE OF SERIAL PRINTER BUFFER ; UNALLOCATED STORAGE AREAS DIRBUF: DEFS 128 ; DIRECTORY BUFITIALIZE PARAMETER POINTER ; UNITIALIZED RAM DATA AREAS SEKDSK: DEFS 1 ; SEEK DISK NUMBER SEKTRK: DEFS 1 ; SEEK TRACK NUMBER SEKSEC: DEFS 1 ; SEEK SECTOR NUMBER HSTDSK: DEFS 1 ; HOST DISK NUMBER HSTTRK: DEFS 1 ; HOST TRACK NUMBER HSTSEC:  DMA ADDRESS TRKTAB: DEFS NODRVS ; CURRENT TRACK TABLE HSTBUF: DEFS HSTSIZ ; HOST DISK I/O BUFFER AREA. UL1CNT: DEFS 1 ; SERIAL PRINTER BUFFER COUNT ; END OF 802FDATA.MAC O LEE ; - ENHANCEMENT FOR REV. B ; -- DRIVE DOOR OPEN MESSAGE ; -- DETAILED ERROR MESSAGE ; -- DISK DRIVE MOTOR & LIGHT OFF WHEN UNUSED ; -- NO SEEK ON THE SAME TRACK ; -- NO SELECT DRIVE FOR THE SAME ; -- PRINTER INTERFACE WITH EPSON SETS-802 CBIOS -- AUG. 25, 1981 .Z80 CSEG .PHASE 0F200H ;******************************** ; THE FOLLOWING EQUATES ARE KEPT* ; ISOLATED FROM THE REST FOR * ; PURPOSES OF MOVCPM GENERATION.* ;******************************** CPMBAS EQU $-BMAC .DEPHASE END FEQU.MAC--EQUATES MODULE PAGE INCLUDE 802FEQU.MAC SUBTTL 802FDATA.MAC--DATA DEFINITION MODULE PAGE INCLUDE 802FDATA.FER ; DRIVE 0 STORAGE AREA ALOCV0: DEFS (DSM0/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV0: DEFS CKS0 ; CHECK VECTOR STORAGE ; DRIVE 1 STORAGE AREA ALOCV1: DEFS (DSM1/8)+1 ; ALLOCATION VECTOR STORAGE CHKSV1: DEFS CKS1 ; CHECK VECTOR STORAGE ;DEFS 1 ; HOST SECTOR NUMBER SEKHST: DEFS 1 ; SEEK HOST SECTOR NUMBER HSTACT: DEFS 1 ; HOST ACTIVE FLAG HSTWRT: DEFS 1 ; HOST BUFFER WRITE PENDING FLAG UNACNT: DEFS 1 ; UNALLOATED SECTOR COUNT UNADSK: DEFS 1 ; UNALLOCATED DISK UNATRK: DEFS 1RIAL AS DEFAULT ; -- SIO #1 ADDED TO SERVE FOR PRINTER THROUGH CH. B ; 12-10-81 SUNG WOO LEE ; - REMOVED CTC CH #1 INITIALIZATION ROUTINE NOT TO CHANGE ; THE BAUD RATE SET UP BY PROM FOR PRINTER ; TeleVideo Systems Incorporated Proprietary InfDOSLN ; BASE OF CP/M (CCP) BDOS EQU CPMBAS+CCPLEN+6 ; ADDRESS OF BDOS ENTRY SUBTTL 802FBOOT.MAC--BOOTSTRAP MODULE PAGE INCLUDE 802FBOOT.MAC SUBTTL 802FCONS.MAC--CONSOLE I/O MODULE PAGE INCLUDE 802FCONS.MAC SUBTTL 802FDISK.MAC--DISK I DISK I/O COMMAND PARAMETERS COMAND: DEFS 1 ; CURRENT COMMAND FDDBYT: DEFS 1 ; DRIVE, SIDE, DENSITY, SELECT LATCH RETRY: DEFS 1 ; RETRY COUNT BOOTRY: DEFS 1 ; BOOT RETRY COUNT UNMSTA: DEFS 1 ; UNMASKED VERSION OF ABOVE DMATAB: DEFS 2 ; DMA IN ; UNALLOCATED TRACK UNASEC: DEFS 1 ; UNALOCATED SECTOR ERFLAG: DEFS 1 ; ERROR REPORTING RSFLAG: DEFS 1 ; PRE-READ SECTOR FLAG READOP: DEFS 1 ; 0 IF WRITE OPERATION; 1 IF READ OPER. WRTYPE: DEFS 1 ; WRITE OPERATION TYPE DMAADR: DEFS 2 ; LAST ; CBIOS FOR TELEVIDEO TS-802 SYSTEM ; COPYRIGHT (C) 1981 ; TELEVIDEO SYSTEMS INC. ; 1170 MORSE AVENUE ; SUNNYVALE, CA 94086 ; (408) 745-7760 ; VERSION V2.0 (RELEASE) ; 7-24-81 SUNG WOO LEE ; - SIGN-ON MESSAGE CHANGE ; 8-25-81 SUNG WOormation. ; This listing is supplied under the terms of a license ; agreement with TeleVideo Systems Incorporated and may ; not be copied nor disclosed except in accordance with ; the terms of that agreement. TITLE 802FBIOS.MAC--TELEVIDEO SYSTEM /O MODULE PAGE INCLUDE 802FDISK.MAC SUBTTL 802FSUBS.MAC--SUBROUTINES MODULE PAGE INCLUDE 802FSUBS.MAC SUBTTL 802FEQU.MAC--EQUATES MODULE PAGE INCLUDE 802FEQU.MAC SUBTTL 802FDATA.MAC--DATA DEFINITION MODULE PAGE INCLUDE 802FDATA.&   '   '