home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / suprbdos.lbr / DOS1.MZC / DOS1.MAC
Encoding:
Text File  |  1993-10-25  |  37.7 KB  |  601 lines

  1.         TITLE    'SUPRBDOS Disk Operating System'
  2. ;
  3. ;******************************************************************************
  4. ;*                                          *
  5. ;*  P 2 D O S --Z80 REPLACEMENT DISK OPERATING SYSTEM VERSION 1.2          *
  6. ;*        No more control-C to change disks!                      *
  7. ;*  COPYRIGHT (C) 1985 BY:     H.A.J. TEN BRUGGE                  *
  8. ;*  ALL RIGHTS RESERVED         MOLENSTRAAT 33                      *
  9. ;*                  NL-7491 BD DELDEN                  *
  10. ;*                 THE NETHERLANDS                  *
  11. ;*                 TEL:..31-5407-1980                  *
  12. ;*  P2DOS WAS WRITTEN BY HERMAN TEN BRUGGE, WHO ASSUMES NO RESPONSIBILITY     *
  13. ;*  OR LIABILITY FOR ITS USE. P2DOS IS RELEASED TO THE PUBLIC DOMAIN FOR      *
  14. ;*  NON-COMMERCIAL USE ONLY.                              *
  15. ;*                                          *
  16. ;*  THE PULBLIC IS ENCOURAGED TO FREELY COPY AND USE THIS PROGRAM FOR         *
  17. ;*  NON-COMMERCIAL PURPOSES. ANY COMMERCIAL USE OF P2DOS IS PROHIBITED        *
  18. ;*  UNLESS APPROVED BY THE AUTHOR, H.A.J. TEN BRUGGE, IN WRITING.          *
  19. ;*                                              *     
  20. ;*  THIS IS MOD 0.2 TO THE RELEASE VERSION OF P2DOS                  *
  21. ;*                                          *
  22. ;******************************************************************************
  23. ;*  MOD 0.2 Revisions
  24. ;*  Renamed to SUPRBDOS
  25. ;*        By Benjamin Ho
  26. ;*               626 Emerson St.
  27. ;*                 Evanston, IL 60201
  28. ;*  Background:
  29. ;* 
  30. ;*  P2DOS MOD 0.1 was not a major improvement on the standard CP/M BDOS.
  31. ;*  While it added Public files, slightly more informative error messages, and
  32. ;*  time stamping support, it did not fix the major annoyances of the CP/M BDOS,
  33. ;*  namely the necessity of logging in new disks with Control-C, mystifying
  34. ;*  error messages, and a delete key that looked like it didn't delete.  
  35. ;*
  36. ;*  P2DOS MOD 0.2 is a major enhancement which liberates the CP/M user from all
  37. ;*  these annoyances.  It is compatible with all CP/M software except those
  38. ;*  that modify the BDOS.  Fortunately, that type of program is extremely rare.
  39. ;*
  40. ;*  P2DOS MOD 0.2 may be used with ZCPR3 to provide an extremely powerful
  41. ;*  100% CP/M 2.2 compatible operating system.  The resulting system is not
  42. ;*  subject to Digital Research's licensing agreement.  The only restriction
  43. ;*  is that it may be used for non-commerical use only, as stated by the
  44. ;*  authors of ZCPR3 and P2DOS.
  45. ;*
  46. ;*  Enjoy!
  47. ;*  9/2/86- 
  48. ;*        Added automatic login of changed disks--no more Control-C 
  49. ;*          when changing disks!  
  50. ;*        Removed P2DOS tie to ZCPR2.  Can now be used with ZCPR3 or 
  51. ;*            (ugh!) normal CP/M.  
  52. ;*        Improved error messages:  
  53. ;*          Disk Error on X: Read Error 
  54. ;*                             Write Error 
  55. ;*                           Non-existent drive 
  56. ;*                             File is Read-Only 
  57. ;*        Fixed delete key--now works like backspace.  No echoing characters 
  58. ;*        Allowed functions 13 and 37 to recognize changes between single and 
  59. ;*            double sided disks on machines which normally require a warm 
  60. ;*            boot when "sidedness" is changed.  Bios modification is needed 
  61. ;*            to support this feature 
  62. ;*        Fixed directory read bug.  Function 37 bug which plagued
  63. ;*            library utility program NULU 1.5 is fixed.                
  64. ;*        Choice of assembly by M80 and compatibles or public domain ZASM 
  65. ;*          System files are read/write, as in CP/M.  Changed from P2DOS 
  66. ;*           mod 0.1 in which system files were R/O
  67. ;*          Deleted P2DOS search path so the more flexible 
  68. ;*           ZCR3 search path could be used
  69. ;*          File split into 3 sections for easy of editing.
  70. ;******************************************************************************
  71. RAMLOW    EQU    00000H            ; START ADDRESS MEMORY
  72. DOSSTRT    EQU    $
  73. P2BIOS    EQU    DOSSTRT+0E00H
  74. ;
  75. ;
  76. ;  P 2 D O S --Z80 REPLACEMENT DISK OPERATING SYSTEM VERSION 1.1
  77. ;
  78. ;; NEW FEATURES OF P2DOS ARE:
  79. ; - TEST CONSOLE STATUS AFTER 256 CHARACTERS OUTPUT. THIS MAKES IT POSSIBLE TO
  80. ;   EXIT A PROGRAM, AFTER YOU HIT ACCIDENTALY A KEY, BY TYPING ^S FOLLOWED BY ^C.  
  81. ;  - ERROR ROUTINES GIVE MORE INFORMATION.
  82. ;      P2DOS ERROR ON D: BAD SECTOR
  83. ;             SELECT
  84. ;             FILE R/O
  85. ;             R/O
  86. ;      FUNCTION =XXX (FILE =FILENAME.TYP)
  87. ;    AS YOU CAN SEE THE ERROR IS DISPLAYED WITH THE P2DOS FUNCTION CALL.
  88. ;    THE OPTION 'FILE =FILENAME.TYP' IS ONLY DISPLAYED IF THE P2DOS FUNCTION
  89. ;    USES A FILENAME. AFTER ALL ERRORS A WARM BOOT IS DONE.E. - PUBLIC FILES ARE SUPPORTED. YOU CAN ACCESS A PUBLIC FILE FROM ANY
  90. ;   USER NUMBER.  THIS MAKES IT POSSIBLE TO PUT FOR EXAMPLE ALL '.COM' IN 
  91. ;   A SPECIAL USER NUMBER AND MAKE ALL THOSE FILES PUBLIC. YOU CAN ACCESS ALL 
  92. ;   THE FILES FROM ANY USER NUMBER ON THE SAME DISK.
  93. ;   A PUBLIC FILE IS A FILE WITH BIT F2 (BIT 7 FROM FILENAME LETTER 2) SET TO
  94. ;   ONE. PUBLIC FILES CAN ONLY BE REFERENCED BY THERE EXACT NAME AND NOT BY WILD
  95. ;   CARD CHARACTERS. . - SEARCH PATH IS IMPLEMENTED JUST AS IN ZCPR2 TO FIND FILES ON OTHER DRIVES
  96. ;   AND IN OTHER USER AREAS. THE FILES MUST BE SYSTEM FILES AND MUST BE
  97. ;   REFERENCED BY THEIR EXACT NAME AS IN PUBLIC FILE NAMES ABOVE.
  98. ;
  99. ; - AUTOMATIC DATE AND TI.
  100. ;
  101. STAMP IS IMPLEMENTED. THE CREATION DATE AND TIME
  102. ;    IS SET WHEN THE FUNCTION MAKE IS EXECUTED. THE UPDATE DATE AND AND E IS
  103. ;    
  104. ;   OAS THE FILE IS CLOSED. TO LET THIS FEATURE WORK YOU NEED TO HAVE A 
  105. ;    REAL TIME CLOCK K HE CORRECT P2BIOS DRIVER ROUTINE. YOU ALSO HAVE TO 
  106. ;    INITIALISE YOUR  DIRECTORY FOR OR  STAMPS.   
  107. ;  - FILE R/O ERROR MESSAGE OCCURS IF ONE OF THE FOLLOWING FILE TYPES IS ACTIVE:
  108. ;     PUBLIC FILE (F2)
  109. ;     /O    (T1)
  110. ;     SYSTEM FILE (T2)
  111. ;    THIS MEANS THAT A SYSTEM FILE OR PUBLIC FILE CANNOT BE ERASED ACCIDENTALYLY
  112. ; - NEW FUNCTION GET TIME (200) IS IMPLEMENTED TO GET THE CORRECT DATE AND TIME.
  113. ;   ENTRASE IS ADDRESS TO PU PUME. THE DATE AND TI.
  114. ;
  115. RECORD HAS THE FOLLOWING
  116. ;   LAYOUT:
  117. ;    R:    DEFS    2    R = 1     (SU 01-JAN-1978)
  118. ;                R = 65535 (SU 05-JUN-2157)     
  119. ;    HOUR:    DEFS    1    HOUR IN BCD
  120. ;    MINUTE:    DEFS    1    MINUTE IN BCD
  121. ;    SECOND:    DEFS    1    SECOND D D 
  122. ;    FUNCTION WORKS ONLY IF CORRECT P2BIOS FUNCTION CALL IS INSTALLED.D. NEW FUNCTION 
  123. ;   OS ON(201) IS IMPLEMENTED TO SET THE CORRECT DATE TE IME.
  124. ;   ENTRASE IS ADDRESS NEW TIME. THE R R .
  125. ;
  126. LAYOUT IS AS ABOVE TO 
  127. ;   FUNCTION WORKS ONLY IF CORRECT P2BIOS FUNCTION CALL IS INSTALLED.ED. - DISK SIZE CAN BE AS LARGE AS 65536*16K=1 048  6 K BYTE=1 G BYTE97
  128. ;  - FILE (F2E CAN BE AS LARGE AS 32*64*16K=32 768K BYTE=32 M BYTE.  
  129. ;
  130. ; YOU CAN ENABLE/DISABLE THE FUNCTIONS MENTIONED ABOVE WITH THE FOLLOWING DATA
  131. ; AND ADDRESSESES; - ENABLE PATH NA.
  132. ;
  133. BY PUTTING ADDRESS OF PATH IN P2DOS+11H. IF THIS VALUE IS
  134. ;   0000H NO PATH IS USED. THIS ADDRESS IS NORMALLY Y O 0040H.11ENABLE P2DOS S ONAND R STAMPING BY PUTTING THE CORRECT P2BIOS TE TSS
  135. ;   AT P2DOS+13H. THIS TE TSS IS NO NOLY LY  THE P2BIOS CONSOLE STATUS 
  136. ;   FUNCTION97
  137. ;
  138. ; - YOU CAN ENABLE THE 25
  139. ;;HARACTER DELAY
  140. ; ANCTION BY SETTING BIT 0 OF
  141. ;   ADDRESS P2DOS+155HIS BIT L IORMALLSETTET TO 1.11YOU CAN D D PUBLIC FILES BY SETTING BIT 1 OF TE TSS P2DOS+15H TO 1.
  142. ;   THIS THIS S NORMALLY SETLY  HIS BOF T ADDRESSES P2BIOS
  143. ;
  144. ; FUNC    NAME    INPUT PARAMETERS    RETURNED VALUES
  145. ;  0    . -OT    NONE            NONE
  146. ;  1    W. -OT    NONE            NONE
  147. ;  2    CONST    NONE            A=0FFH IF READY
  148. ;                    A=000H IFMUS READY
  149. ;  3    CONIN    NONE            A==OLE CHARACTER
  150. ;  4    CONOUTOUTOUTONSOLE CHARACTER
  151. ;  1
  152. ;  5    LIST    C= PU T T E. 
  153. ;  1
  154. ;  6    PUNCH    C=PUNCH CH TERTER;  7    READER
  155. ;  1E.E=READER K HER
  156. ;  8    HOME    NONE            NONE
  157. ;  9    SELDSK TO 1.DRIVE NUMBER (0..15)    HL=DISK PARAMETER HEADER TE TSS
  158. ;        E=INIT SELECT FLAG    HL=0000E            INVALID DRIVE
  159. ; 10FLTTRK    BC=TRACK NUMBNUMBNUMB 11    SETSEC    BC=SECTOR NUMBEIVE
  160. NONE
  161. ; 12    SETDMAIN BCDMA TE TSS        NONE
  162. ; 135)AD5)AAAA=00E            NO ERROR
  163. ;                    A=01H IF ERROR
  164. ; 1Y IFWRITE    C=0 WRITE DATA        A=00E            NO ERROR
  165. ;     TO 1.1 WRITE DIRECTORY    A=01E            ERRORENABLEC=2 WRITE NEWT PA
  166. LIS5     PU TST                AA=D TI.E            READY
  167. ;                    A=0ENTRE            NOT READY
  168. ; 16    SECTOUTOIN BCLOGICAL SECTOR    HL=PHYSICAL SECTOR OR S B;            ENABLEDE=R
  169. NSLATION TABLEENABLE    TE TSS
  170. ; XX    TIME TO 1. TO 1. GET UTE:        HL=POINTER TO S ONS ONLE;
  171. ;;
  172. ;FH UPR CLOCKCK1    W+0:R LSB SINCE 1,11 THE P28ENABLE1    W=ONE    NTER R R         11ATE MSB    HOOOOTABLE                  L+2:HOURS  (BCD)
  173. ;    HH3:INUUTES (BCDCDDDDD1A1A4:SECOND)
  174. ;BCD)
  175. ;
  176. . -OT    EQU    P2BIOS+00000H        ; P2 SYSTEM COLD BOOT
  177.     OOTER
  178. S IM2BIOSNUMB 3H        ; P2CKCM WARM BOOT
  179.  
  180. T    EQU    RBIOSNUMB 6H        DMA2 SYSTEM Y IFWLE STATUSOR SONIN    IN    P2BIOS+00009LATLATCKCM CONSOLE INPUTND)NOUTACKET UUUUCHCHP2 SYSTEM TEM E OUTPUTP
  181.  PU T PU T SISNUMB FHOUTOILSYSTEM  PU T O O O
  182. PUNCH    H    H    NUMB 12UTPUOR SOOR SOEM EM EM TPUT
  183. 1.1IVE
  184. IVE
  185. IVE
  186. D TI.15INCP2 SUTN(0VE N INPUT
  187. HOMEMEMEEE18
  188. ;     R LSTEM H000 DISK
  189. SELDSKENABLE IOSNUMB 1BBIME SELECT DISK O
  190. ETTRK    RK    RK        1ECAN ECAN EM SELECT TRAC,1
  191. SET=RLE PHLD TI.2121
  192. HSELECT SECTOR O
  193. ETD.DD.DD.DDD244HOM
  194. ;   OD.D ADDRESSRESSEADM  M  M  77TEM READ 128 BYTESOUTORITE                    NUMB 2AAEM WRITEWRITED TI.EYTES
  195.  PU TST    EQU    ET UUU2D2D2DIST STA    C    CCTREAD READ FHOOO3RK    RRK    RSECTOECT ASRANSLATION
  196. UTE:    U    PNUMB 6ETTR GET/CTOIME
  197. ; ; -T BE CHANGED IF ROUTINE PRESENTSECTO
  198. ; TO SERNAL SIZMINIONS
  199. ;ND)NTCACK003H            ; KEY TO GENERATE 212CTOIP2BIOS+0
  200. CONTES ONS05H    H     BREAK LINEND)NTND)NTQU    00IME
  201.             ; BR .SPACE
  202.  BRED.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDITE     BRE
  203. LFD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDINPRITE    D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE FEEDOR SSB    R
  204. 0DTE 2; CARRIAGE RETURN
  205.  NA.PS ONS10135; SET/RESET PRTO S FLAGND)NTND)NTU    012135; REPEAT RITE     ND)NTS    D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD01GEN; STOP TO 1.1OLE OUT9L NA.U    U    NERRITE     NOLETE LINEND)NTX    U    NIME
  206.     RAC, INPRTE RITE     ;
  207. ;FLSYPACES)
  208. DRVSES
  209. ;NS
  210. ;N3P2 SUCDCRIVE SEPERAIME. (:)
  211. RU. -D.DDD.DD7H        CDCELEACK0ASLAY
  212. HARY AMAXCMD    D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD40RITE          OF VALID P2DOS COMMALE IHIS BSTART PROGRAM
  213. ;    
  214. P2DOS:
  215. ;
  216. VERS:    DB    0D5HRITE    VERSION D VNOT IMPLEMENTD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE
  217.     DPEASIZMP2DOS CCDC5s added to support system id
  218. MAXDVERSIS IM201Gfeature in modified Kaypro bios21VERSIS    000H21VERSIS    000H21VERSIS    000H(:TA
  219. CP2DOSY A:)T:    J212CNTACK0ARITE    JUMP TO ERAIONE    NRN2DOSCONIRROR MESS CONSES P2DOSSECTOBad sector message changeNOT o read/write messages-B./C
  220. ;STBDSC:    DEFW    BADSECRITE    BAD GICR MESS CONSE
  221. STSEL:    DEFW    SELERRRITE    FILE (                    N
  222. STRO:    DEFW    RDONLYRITE    DCES)EM W ONLY O
  223. FILRO:    DEFW    FILRORITE    /EAD ONLY O
  224. RDERR:    DEFW    RDERRRITE    Read error message O
  225. WRTER:    DEFW    WRTERIVE
  226. RAC,Write error messageCONIXTERSB    RON 
  227. N9E
  228. SEC    PATH:    DEFW    RAMLOWNUMB 40HOUTOIATHNAME FOR OPEN FILE COMMAND
  229. ;Path no    DPX    Uorted--B./CWRITEDATH:    DEFW    RAMLOWNUMB H
  230. ER N
  231. ; S ONADDRESS P2BIOSY A    ILATLDOUTE:H     IMEAD:    DEFW    UTE:    RAC,S ONROUT2D2T    NFOR UTE:21ENDILATLLLLL; OLE CATE STAMPCT DMAXIF    (RITE     DOUTE:)
  232. UTE:AD:    DEFW    +000000000000000000000000000000000000000000000000001ENDIFR R
  233. ; OR   CONSS FOR SPECIALS
  234. ; BIT 0: PUBLIC FILE D D(1)/DISABLE+2)
  235. ;ME T A
  236. L DETION BWRITEWTE 2ARACTERS ACTIVE(1)/DISABLE+2)
  237. ;
  238. OR   CONS;
  239. ;FLdded    0DMA2RITE    OR   CONSME TECONINTACK0A PO FLAAOMMANDCT D
  240. OF T:    LD    A,STATRAC,GET ILES NUMBER21LD    (FUNCT),AS
  241.  SAVE IT FOR     RBER USE21LD    HL,0    RAC,
  242. ;   O1    W TO ZERO21LD    (PEXIT),1    WS
  243.  CLEAR EXILAY
  244. ODE
  245.     XOR    ARITE    CLEAR A21LD    (FLDRV),AS
  246.  M YT DCES) SELECT DONE OR   CONS21LD    (RDWR),AS
  247.  M YT READ/M BOOOR   CONS21LD    (SPSAVE),SPS
  248.  SAVE STACK PO;
  249. ;;S BN DD    SP,P2DOSS    K LCONS INTERSB    R STACK PO;
  250. ;;S BS IMUSH    IX    RAC,SAVE INDEX REGISTES BS IMUSH    DERITE    SAVE PARAMETER REGISTES BS IMOP    IX    RAC,GET IT BACK IN IX21LD    HL,P2EXITS
  251.  GET EXIT ADDRESS P2DOS21PUSH    1    WRITE    SAVE IT H. TTACK TO 3ROUTO FROM P2DOS21LD    A,STATRAC,GET ILES CODEY A    ILATLDOUTE:21CP    200135; EST GET UTE:21JS
  252. ;NZ,GETC=0S
  253.  YES THENCONS TIME21CP    201    RAC,TEST S9L OR SSMAXJS
  254. ;NZ,
  255. ; YIMS
  256.  YES THENACE
  257. UTE:21ENDIFY APUNCHS
  258. ;NECELEAD+1S
  259.  TEST GREATER THEN MA101D VN 
  260. 5)=DSTATRAC,IF SO RETURN TO CALL1 ND DOMUSHING21LD    HL,CTCAK L LOAD INPUE
  261. N DD    B,0    RAC,PREPARE 16ME T ADD21ADD    HL,BCRITE    ADD21ADD    HL,BCRITE    ADD TWIH IFMTO GET WORIS NALUE
  262. N DD    A,(1    W)    RAC,GET MDB21RACT    HLRITE    ONE    NONSOLO MSB21LD    H,(1    W)    RAC,GET MSB21LDN D,ARITE    SAVE MD
  263. ; 16IN L 21JS
  264. ;N(1    W)    RAC,JUMP TO ROUT1A1ER N
  265. ; 8EstemABLER R
  266. ; FUNC    NAME            . -DRNARAMETERS5)TURNED VALU7H
  267. ;                EANNNN:SSSNONE
  268. ;   1    H    HSECTOED.DD5)AAAA=K HES B;   2    C=O NOLETPD.DD    E=K HEIVE
  269.     A=0RK    R
  270. ;   3    OR SOOSECTOED.DD5)AAAA=K HES B;   Y IFH    HA=00ED.DD    E=K HEIVE
  271.     A=0RK    R
  272. ;   2:IST
  273. 1PUT        EE DHARW.IVE
  274.     A=0RK    R
  275. ;   6    DIRECT H    H I/O    E=0F (BA=. -DQU    EARACTER
  276. ;                                            H    ESENO K HER 
  277. ;                                PRNEWTNT
  278. ;                E21
  279. D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD0E.E=H    H STATUS
  280. ;                ETO S H..0FNSO        A=0RK    R
  281. ;   7    GET I/O BYTEACTE:SSSAER T/O BYTE (RAMLOW+03H)
  282. ;   8    
  283. ;   OI/O BYTE        EER T/O BYTE        A=0RK    R
  284. ;   9    LFNT STRING        DE=T    NSTRING    A=0RK    R
  285. ;  MEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEKCM H    H BUENTRTE DDE=T    NBUENTRTE DDDDDH    
  286. ;  CH T    GET H    H STATUS5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTRK    RESENO K HER 
  287. ;                                PRNEWTNT
  288. ;                            01E            K HER PRNEWTNT
  289. ;  125)TURN D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4ON      5)AAAA=D.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4ON D V+22S:)
  290. ;  LE SM YT DISKCKCM5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTRK    R NO $*.* FILE
  291. ;                            A=DMA2 $*.* FILE PRNEWTNT
  292. ;  1Y IFFILE (DISK        EUTPUOISK NUMBER        A=0RK    R
  293. ;  15    OPEN FILE        DE=T    NFCPEA    AUTPUOIRLINACK0A CODE
  294. ;  16PUNCHLOSE FILE        DE=T    NFCPEA    AUTPUOIRLINACK0A CODE
  295. ;  17FLARCH FOR FIRST    DE=T    NFCPEA    AUTPUOIRLINACK0A CODE
  296. ;  D)FLARCH FOR NEXT        DE=T    NFCPEA    AUTPUOIRLINACK0A CODE
  297. ;  19    DFDE FILE        DE=T    NFCPEA    A=ERROR CODE
  298. ;  20    CKCM SEQUENTIAL        DE=T    NFCPEA    A=READ/M BOOCODE
  299. ;  2ED.ERITE SEQUENTIAL    DE=T    NFCPEA    A=READ/M BOOCODE
  300. ;  22    MAKE FILE        DE=T    NFCPEA    AUTPUOIRLINACK0A CODE
  301. ;  23    RENAME FILE        DE=T    NFCPEA    A=ERROR CODE
  302. ;  2Y IF3ROUTO LOGIN VECTRIVE
  303. N:SSSHL= NO IN VECTRS B;  255)TURN CURRENT DISK5)AAAA=CURRENT DISK
  304. ;  26    SET D.D  REA    DEUTPUOMAC=2ESS        A=0RK    R
  305. ;  27    GET ALLOCMINIC=2ESS5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:=T    NALLOCMINI 
  306. ;                                VECTRS B;  NO E    M BOOPROTE         LISK5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTRK    R
  307. ;  29    GET R/O VECTRIVE
  308. 5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:=R/O VECTRS B;  30    
  309. ;   OFILE ATTRIBUTES    DE=T    NFCPEA    A=ERROR CODE
  310. ;  31    GET T    NDPPEA5)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:=T    NDPB
  311. ;  32FLT/GET USER CODE    E=0F (BA=USER D D
  312. ;                E=USER              A=0RK    R
  313. ;  33
  314. ;        D 2DOM        DE=T    NFCPEA    A=READ/M BOOCODE
  315. ;  3RITE RANDOM        DE=T    NFCPEA    A=READ/M BOOCODE
  316. ;  35PUNCHOMPUTE FILE (F2E    DE=T    NFCPEA    A=ERROR CODE
  317. ;  36    SET 2DOM RECORD    DE=T    NFCPEA    A=0RK    R
  318. ;  375)
  319. ;   OMULTIPLE DRIVE    DE=MASKE.E=00H
  320. ;  38    RITE     IMPLEMENTEDACTE:SSSA=0RK    R
  321. ;  39    RITE     IMPLEMENTEDACTE:SSSA=0RK    R
  322. ;  40    M BOO2DOM WITH    DE=T    NFCPEA    A=READ/M BOOCODE
  323. ;     ZERO FILL
  324. ; 200    GET UTE:        DE=T    NTO PUT UTE:                    H    
  325. ; 20    P9L M S    DE=T    NUTE:        A=0RK    RHIS BDIRLINACK0A CODE :     H    ,01H,02H,03HESEAD5RROR
  326. ;                  A=0DMA2ESE                    N
  327. ; ERROR CODE     :     H    ESEAD5RROR
  328. ;                  A=0DMA2ESE                    N
  329. ; READ/M BOOCODE:     H    ESEAD5RROR
  330. CTER   A=01EEM W  => END OF FILE
  331. ;             M BOO=> DIRLINACK0A
  332. ; ALLICAINTS:Y IFWL
  333. ; ALLY ACTABLE:    DEFW        OIN BCLRAC,P2DOS S. -OT 
  334.     DEFW    RDCONRITE    H    HSECTOEVE N     DEFW    BWRCONRITE    H    H
  335. 19L    DEFW    RDRDIVE
  336. RAC,OR SOOSECTOEVE N     DEFW    W=RLRITE    H    HA=00EVE N     DEFW    W BRRAC,CE A=00EVE N     DEFW    DCIORITE    DIRECT H    H I/O21SIZW    GIOST    RAC,GET I/O BYTE21SIZW    SIOST    RAC,
  337. ;   OI/O BYTE21SIZW    MESSRITE    LFNT STRING21SIZW    RDBULATLRAC,CKCM H    H BUENTRER
  338. m idEFW    TSTCS    RAC,GET H    H STATUS21SIZW    ELEAND12RITE    3ROUTO VERSPRTUMBER
  339. m idEFW    ELEANDLE SRAC,M YT DISKCKCM21SIZW    ELEAND1Y IFRAC,FILE (0Em idEFW    ELEAND15RITE    OPEN FILE21SIZW    ELEAND16RITE    CLOSE FILE21SIZW    ELEAND17RITE    SEARCH FOR FIRS          DEFW    ELEANDD)RITE    SEARCH FOR NEX          DEFW    ELEAND19RITE    DFDE FILE21SIZW    ELEAND20RITE    CKCM SEQUENTIAL21SIZW    ELEAND21RITE    M BOOSEQUENTIAL21SIZW    ELEAND22    RAC,MAKE FILE21SIZW    ELEAND23    RAC,RENAME FILE21SIZW    ELEANDION DRITE    3ROUTO LOGIN VECTRS B    DEFW    ELEAND25RITE    3ROUTO CURRENT DISK21SIZW    ELEAND26RITE    
  340. ;   ODMAC=2ESS21SIZW    ELEAND27RITE    GET T    NALLOCMINI VECTRS B    DEFW    ELEANDNO ERITE    M BOOPROTE         LISK21SIZW    ELEAND29    RAC,GET R/O VECTRS B    DEFW    ELEANDET UUURITE    
  341. ;   OFILE ATTRIBUTES21SIZW    ELEAND31RITE    GET T    NDISK PARAMETER HEAVE N(DPH) 21SIZW    ELEAND32RITE    GETR  ET USER CODE21SIZW    ELEAND33RITE    CKCM 2DOM21SIZW    ELEAND3Y IFRAC,M BOO2DOM21SIZW    ELEAND35RITE    COMPUTE FILE (F2E21SIZW    ELEAND36    RAC,
  342. ;   O2DOM RECOR DAT    DEFW    ELEAND37RITE    M YT MULTIPLE DRIVE21SIZW    DUMMYP2 SUCOT    0DPLEMENTED 
  343.     DEFW    DUMMYP2 SUCOT    0DPLEMENTED 
  344.     DEFW    ELEANDKEY RAC,M BOO2DOM WITH ZERO FILLHIS BI/O ROUTINECT D
  345. ; AA=OE IN9LSEC    EM WTE 2ARACTER FROM H    H AND ECHO
  346. ;  IF CHARE DR,SECON, BRE, NA.H OR >    NONET/E
  347. ;
  348. RDCON:    CALL    GET
  349. ;   OSRAC,GET K HES BPUNCHALL    TST
  350. ;   OSRAC,TEST IF CR,SECON, BRE, NA.H OR >    NONET/E
  351.     JIVE
  352. C,EXITP2 SUCO THEN EXIT21CALL    WRCONRITE    ECHOTE 2ARACTER
  353. EXIT:    LD    (PEXIT),AS
  354.  3ROUTOTE 2ARACTER 
  355. DUMMY:5)T                ; AND EXIT P2DOSHIS BP2DOS M BOOH    HY ABWRCON:    LD    A,RT TA    OPY CHARW.S B    JIVE
  356. WRCONRITE    AND A=00EUT I      SEC    EM WEM WER
  357. ER N
  358. RDRDR:    CALL
  359. ;        VE NRITE    GET K HER FROM OR SOO21JSB    XIT    RAC,AND 3ROUTO IT TO CALLER HIS BM BOO=RLY AW=RL:    LDPUNCH,RT TA    OPY CHARW.S B    JS
  360. ;N=RLRITE    AND A=00EUT IT TO PUNCH DEVICE
  361. SEC     WRITEOUTISTY AW PU T:    LDPUNCH,RT TA    OPY CHARW.S B    JS
  362. ;N BRRAC,AND A=00EUT IT TO LIST DEVICE
  363. SEC     DIRECT H    HSECTOEUT/O; KY ADCIO:    LDPUNCH,RT TA    OPY CHARW.S B    INC    E135; EST IF 0FFH21JIVE
  364. Z,DCIO0    RAC,YES DO . -D          INC    E135; EST IF 0FD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD021JS
  365. ;NNZ,CONOD.DDK L NO THEN O; KTE 2ARACTER
  366. MAXCALLPUNCHONST    RAC,GET H    H STATUS21JSB    XIT    RAC,AND 3ROUTO IT TO CALLER
  367. DCIO0:    CALLPUNCHONST    RAC,GET H    H STATUS21OR    A135; EST I      5)T    ZRITE    EXIT IF NO K HER PRNEWTNT21CALLPUNCHA TNRITE    GET K HES B    JSB    XIT    RAC,AND 3ROUTO IT TO CALLER
  368. ER N
  369. ; GET I/O 
  370. US BYTEY AGIOST:N DD    A,(RAMLOWNUMB 3H)    ; GET I/O BYTE FROM RAM21JSB    XIT    RAC,AND 3ROUTO IT TO CALLER
  371. ER N
  372. ;   OI/O 
  373. US BYTEY ASIOST:    LD    A,RT TA    OPY I/O BYTE21LD    (RAMLOWNUMB 3H),AK L AND SAVE IT IN RAM21RET                ; EXIT TO CALLER
  374. ER N
  375. ; TESLAY
  376. =OE SRAC, USY ATSTC;
  377. ;FLPUNCHALL    G+0000000000000000000000000000000000000000000000000000000000000000000000000000000000ITE    GET H    H STATUS21JSB    XIT    RAC,AND 3ROUTO IT TO CALLER
  378. ER N
  379. ; A=00EUTTE 2AR ( NA.ROL CHAR = ^CHAR)
  380. ;
  381. OUTCH:    CALL    TST
  382. ;   OSRAC,TEST ILAY
  383. R,SECON, BRE, NA.H OR >    NONET/E
  384.     JIVE
  385. NC,WRCONS
  386.  YES THEN JUMP21PUSH    AFRITE    SAVE K HES BN DD    A,'^'AT ROAD A WITH '^' 21CALL    WRCONRITE    A=00EUT I      S IMOP    ALATLRAC,GET K HER BACK21PUSH    AFRITE    SAVE IT AGAIN21ADD    A,'A'-1RITE    ADD OFFSET21CALL    WRCONRITE    A=00EUT I      S IMOP    ALATLRAC,GET K HES B5)T                ; 3ROUTO TO CALLER
  387. ER N
  388. ; ECHO CR,SECONY ACROUT:    LD    A,CRRITE    A=TEM RIA NA.UETH321CALL    WRCONRITE    A=00EUT I      N DD    A,SECONRITE    A=EM TFE5HRESO FALL THROUGH TO A=00EUT R012NUMB 2ER N
  389. ; M BOOK HER ON C=OE
  390. ;
  391. WRCON:    CP    TAB135; EST IF TAB21JIVE
  392. NZ,WRCON1    K L NO THEN JUMPCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDON0:    LD    A,' 'RITE    EXPAND TAB WITH HARYCES21CALL    WRCONRITE    M BOOHARYCE21LD    A,(TABCNT)    K LCONS TAB COUN          AND    7135; EST IF DONUMB 2MAXJIVE
  393. NZ,WRCON0    K L NO THEN REPEAT21LD    A,ETE RAC,3ROUTO TAB21RET                ; 3ROUTO TO CALLER
  394. WRCONA
  395. LS IMUSH    AFRITE    SAVE K HES BPUNCHALL    G+000000000000000000000000000000000000000000000000035; ESFHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTUS AND  NA.S/ NA.C21POS
  396. ;NAFRITE    GET K HER BACK21PUSH    AFRITE    SAVE IT AGAIN21LDPUNCH,ARITE    COPY I      PUNCHALLPUNCHON
  397. SERAC,A=00EUT I      S IMOP    ALATLRAC,GET K HER BACK21PUSH    AFRITE    SAVE IT AGAIN21LDPUNCH,ARITE    COPY I      N DD    A,(F
  398. ;  1E)    K LCONS PR;
  399. ;;R ECHO FLAG 
  400.     OR    A135; EST I      PUNCHALL    NZ, BRRAC,NON ZERO =>
  401. 1PUT CHAR TO LF==21LD    A,(FLAGS)    K LCONS5s CONS BYTE
  402.     BIT    1,A135; EST DELAY WRITEW BYTES ACTATE MMAXJIVE
  403. Z,WRCON2    K L NO THED 
  404. XI      N DD    1    W, NOLAYS
  405.  GET  NOLAY COUNTER
  406. MAXXOR    ARITE    A=0 
  407.     OR    (1    W)    RAC,TESLAY
  408. OU===021JIVE
  409. Z,WRCON2    K L YES THED 
  410. XI          DEC    (1    W)    RAC,ELSE DECREMENLAY
  411. OU==CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDON O
  412. ETS IMOP    ALATLRAC,RESTORE CHARW.S BESO FALL THROUGH TO COUNT R012NUMB 2ER N
  413. ; COUNTTE 2ARACTERS INOUTINUMB 2ER N2D2OUNTC:    LD    HL, BRECNTS
  414.  GET ONE    NONSOLO TAB COUNTER
  415. ;Part of delete key fix--B./C
  416. ;    CP    RUB
  417. SERAC,TEST IF CHARW.R =  BRE
  418. OUT
  419. ;    RET    ZRITE    YES NO UPR  BRE COUNTER
  420. MAXRACT    (1    W)    RAC,RACTREMENT TAB COUNTER
  421. MAXCP    ' '135; EST IF CHAR >= ' '
  422. MAXRET    NSTATRAC,YES, NOR    C    TE 2ARACONSOLHEN EXI          DEC    (1    W)    RAC, NA.ROL K HER, DECREMENT TAB COUN      PUNCHS
  423. ;N NA.01GTEST BLSYPQU    0MAXJIVE
  424. NZ,COUNT0    K L NOIME. (CKHARYH IFMTHEN JUMP21DESTAT(1    W)    IME
  425.     RCREMENT TAB COUNTER
  426. MAXRET                ; AND EXIT21CP    RUBOUT21JIVE
  427. NZ,COUNT021DESTAT(1    W)
  428. 5)      COUNT0:    CPPUNCHIVE
  429. RAC,TESLAY
  430. AR
  431. L NA.UETH321JIVE
  432. NZ,COUNT1    K L NO THEN JUMP21LD    (1    W),0    RAC,M YT TAB COUN      5)T                ; AND EXITND)UNT1:    CP    TAB135; EST TABTE 2ARACTER
  433. MAXRET    NZP2 SUCO THEN EXIT21PUSH    AFRITE    SAVE K HES BN DD    A,(1    W)    RAC,GET  BRE COUN          ADD    A,8    RAC,ADVANCE IT 8 POSITION21AND    0FDV PU T 
  434. ;   OIT TO NEXT TAB POSITION
  435. MAXLD    (1    W),ARITE    SAVE IT21POS
  436. ;NAFRITE    RESTORE CHARW.R 21RET                ; AND EXITHIS BGET K HER FROM H    HY AGETCH:    LD    HL,LAST
  437. ;   OSK LCONS PO;
  438. ;;11O LCK1SECTOEUTTE 2ARACTER
  439. MAXLD    A,(1    W)    RAC,GET K HES BN DD    (1    W),0    RAC,M YT LAST K HES B    OR    A135; EST IF CHARW.R PRNEWTNT21RET    NZRITE    3ROUTOESESO21JS
  440. ;ND    DNRITE    ELSE GET K HES B;
  441. ; GET H    H STATUSY AG+0000000000000000000000000000000000000000000000000000000000    LD    A,( NOLAY)    K LCONS 256 BYTES  NOLAY
  442.     OR    A135; EST I          JIVE
  443. NZ,GGG10    K L NON ZERO,  NOLASETTTIL ACTIVE OR DISABLE DATPUNCHALLPUNCHONST    RAC,GET H    H STATUS21AND    1135; EST I          JIVE
  444. NZ,GGG11    K L NON ZERO THEN GET K HES BGGG10:    LD    A,(LASTCH)    K LCONS LAST K HES B    OR    A135; EST I          JIVE
  445. NZ,GGG13    K L NON ZERO THEN K HER PRNEWTNT21CALLPUNCHONST    RAC,GET H    H STATUS21AND    1135; EST I      5)T    ZRITE    3ROUTOESENO K HER PRNEWTNT
  446. GGG1A
  447. LPUNCHALLPUNCHA TNRITE    GET K HES BPUNCHS
  448. ;N NA.S    RAC,TESFHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTE:    UK HES B    JIVE
  449. NZ,GGG12    K LBY SETHED 
  450. XIQU    EARACTER
  451. MAXCALLPUNCHA TNRITE    GET NEXQU    EARACTER
  452. MAXCPPUNCHONTC135; EST IF USER WANTS TTABXI          JS
  453. ;NZ,RAMLOWNUMB INCYES THEN WAR    HL=P          JIVE
  454. G+000000000000000000000000000000000000000000000000035; EST AGAIN
  455. GGG1 O
  456. ETN DD    (LASTCH),AS
  457.  SAVE K HES BN DD    A,0F (B PU T 
  458. ;   ODELAY COUNTER
  459. MAXLD    ( NOLAY),AS
  460.  AND SAVE IT
  461. GGG13:N DD    AM WRITE    K HER PRNEWTNT CODE21RET                ; 3ROUTO TO CALLER
  462. ER N
  463. ; TESQU    EARACTER
  464. ;  EXIT TEM RY=0: CR,SECON, BRE, NA.H OR >    NONET/E
  465. ;       TEM RY=1: ALL OTHERTE 2ARACTERSY ATSTCH:    CPPUNCHIVE
  466. RAC,TESLAY
  467. AR
  468. L NA.UETH321RET    ZRITE    3ROUTOESESO21CPN DLATLRAC,TEST EM TFE5HR5)T    ZRITE    3ROUTOESESO21CP    TAB135; EST TAB21RET    ZRITE    3ROUTOESESO21CPPUNCHONTH135; EST BLSYPQU    0
  469. ;Added next two lines as a part of delete key fix--B./CMAXRET    ZRITE    3ROUTOESESO21CP    RUBOUT21RET    Z21CP    ' '135; EST >    NONET/E
  470. 5)T                ; 3ROUTO TO CALLER
  471. ER N
  472. ; M BOOBACKHARYCE,HARYCE,BACKCPQU    0ER N
  473. W NA.H:    CALL    W NA.0    RAC,M BOOBACKHARYCE21LDPUNCH,' 'AT ROAD HARYCE21CALLPUNCHON
  474. SERAC,AND A=00EUT I      W NA.0:    LDPUNCH, NA.01GLOAD BACKHARYCE21JS
  475. ;NCONOD.DDRAC,AND A=00EUT I      SEC    
  476. 1PUT MESS CONSE
  477. ;
  478. MESS:    LD    A,(DE)    RAC,GET BYTE FROM BUENTRER
  479. MAXCP    '$'135; EST LAST BYTE21RET    ZRITE    YES, THEN 3ROUTO TO CALLER
  480. MAXRACT    DRT DMAO FLTO NEXT BYTE21PUSH    DERITE    SAVE ONE    NTER
  481. MAXCALL    WRCONRITE    A=00EUTTE 2ARACTER
  482. MAXPOS
  483. ;NDERITE    RESTORE PO;
  484. ;;S B    JIVE
  485. MESSRITE    stemEST AGAINHIS B CONSAIN PRINTS #,CR,SECON AND ADVANCES TO TABCX1
  486. ;
  487.  CONSAIN:    LD    A,'#'AT ROAD '#'
  488. MAXCALL    WRCONRITE    A=00EUT I       CONSAIN0:    CALLPUNCHROUTRITE    A=00EUT CARRIA NA.UETH3/EM TFE5HR CONSAINA
  489. LN DD    1    W, BRECNTS
  490.  GET  BRE COUNRNO;
  491. ;;S BN DD    A,(TABCX1)S
  492.  GET POSITION FIRSQU    EARACTER OUTORMAXCP    (1    W)    RAC,CHECK IT21RET    ZRITE    3ROUTOESEH. TAME POSITION21LD    A,' 'AT ROAD HARYCE21CALL    WRCONRITE    A=00EUT I          JIVE
  493.  CONSAIN1    RAC,stemEST AGAINHIS B; -TE CNEN
  494. ;  ERAI: T    EQ:)T BUENTRER-1
  495. ;          
  496. ; 16E DHARW.R COU== (ALWAYS>0)Y A NOLCH:    DESTATPEAIME
  497.     RCREMENQU    EARACTER COU==21LD    A,(TABCNT)    K LCONS TAB COUNTER
  498. MAXPUSH    AFRITE    SAVE IT21PUSH    BCRITE    SAVE K HER COU==21LD    A,(TABCX1)S
  499.  GET POSITION FIRSQU    EARACTER OUTORMAXLD    (TABCNT),AS
  500.  SAVE IT IN  BRE COUNTER
  501.  NOLCH0:    LD    A,PEARAC,COPY CHARW.R COU==21OR    A135; EST IF 021JIVE
  502. Z, NOLCH2    K L YES THEN JUMP21DESTATPEAIME
  503.     RCREMENT I          INC    HLRITE    RACTREMENT BUENTRER ONE    NTER
  504. MAXLD    A,(1    W)    RAC,GET K HER FROM BUENTRER
  505. MAXPUSH    1    WRITE    SAVE BUENTRER ONE    NTER
  506. MAXCALL    TST
  507. ;   OSRAC,TEST IF CR,SECON, BRE, NA.H OR >    NONEP21JIVE
  508. NC, NOLCH1    K L YES THEN JUMP21RRA                ; ELSE IME S BE  NA.ROL K HES BPUNCHALLPUNCHOUNTSTATRAC,COUNT CONTROLTE 2ARACONSOLWICE
  509. DELCHA
  510. LPUNCHALLPUNCHOUNTSTATRAC,COUNTTE 2ARACTER
  511. MAXPOS
  512. ;N1    WRITE    GET BUENTRER ONE    NTER
  513. MAXJIVE
  514.  NOLCH0    RAC,stemEST AGAIN
  515. DELCH O
  516. ETS IMOP    BCRITE    RESTORE CHARW.R COU==21POS
  517. ;NAFRITE    stemAB COUNTER
  518. MAXPUSH    1    WRITE    SAVE BUENTRER ONE    NTER
  519. MAXPUSH    BCRITE    AND K HER COU==21LD    HL, BRECNTS
  520.  GET  BRE COUNTER ONE    NTER
  521. MAXSUPEA(1    W)    RAC,CALCULATE DIENTRERENCE
  522. DELCH3:    DEC    ARITE    DECREMENT I      PUNCHS
  523. ;N8    RAC,COMPARE WITH K MAXJIVE
  524. NC, NOLCHY IFK L JUMP IF >=K MAXPUSH    AFRITE    SAVE DIENTRERENCE21CALL    W NA.01GREMOVE K HER END OUTORMAXPOS
  525. ;NAFRITE    RESTORE COU==21JIVE
  526.  NOLCH3    RAC,REMOVE MORE CHARW.RS
  527. DELCHIVE
  528. IS IMOP    BCRITE    RESTORE CHARW.R COU==21POS
  529. ;N1    WRITE    RESTORE BUENTRER ONE    NTER
  530. MAXRET                ; AND 3ROUTO TO CALLER HIS BCKCM BUENTRER
  531. ER N
  532. RVERSISUF:    LD    A,(TABCNT)    K LCONS CURRENRNOSITION CURSOR
  533. MAXLD    (TABCX1),AS
  534.  SAVE ITDTVERSISUF0:    PUSH    IX    RAC,SAVE :)T ADDRES6 CUENTRER
  535. MAXPOS
  536. ;N1    WRITE    GET IT IN 1    W21LDPUNCH,(1    W)    RAC,GET ECIMUMOUTINE LENGTH21RACT    HLRITE    RACTREMENT TO EM TLENGTH POSITION21LD    B,0    RAC,CLEAR EM TLENGTH COU==21PUSH    1    WRITE    SAVE :)T EM T- 1
  537. RDBUFA
  538. LS IMUSH    1    WRITE    SAVE REGISTERS21PUSH    BCDTVERSISUF2:    CALL    GET
  539. ;   OSRAC,GET K HES BS IMOP    BCRITE    RESTORE REGISTERS21POS
  540. ;N1    W21AND    0NUMB 6E01GMASKTE 2ARACTER
  541. MAXCPPUNCHONTE RRAC,TEST IF CONTE21JIVE
  542. NZ,RDBUF3    K LBY SETHEN JUMP 21PUSH    1    WRITE    SAVE REGISTERS21PUSH    BC21CALL    AGAIN0    RAC,MOVE CURS ASO NEXT OUTORMAXJIVE
  543. RDBUF2RITE    AND GET NEXQU    EARDTVERSISUF3:PUNCHS
  544. ;N NA.01GTEST BLSYPQU    0MAXJIVE
  545. NZ,RDBUFY IFK LBY SETHEN JUMP
  546. DOBACK:    LD    A,PEARAC,TEST IF ; -TING CHAR FROM EMPTYOUTINUMB 2MAXOR    COL    JIVE
  547. Z,RDBUF1    K L YES THEN GET NEXQU    EAR21POS
  548. ;N1    WRITE    GET :)T OUTORMAXPUSH    1    WRITE    AND SAVE IT AGAIN21CALL    DEL
  549. ;   OSIME
  550.     RLETE CHARW.S B    JIVE
  551. RDBUF1    RAC,GET NEXQU    EARACTER
  552. RVERSISUFIVE
  553. IPUNCHS
  554. ;N
  555. ;  1E135; ESRNRINT ENABLE/DISABLE21JIVE
  556. NZ,RDBUF6    K LBY SETHEN JUMP21LD    A,(F
  557. ;  1E)    K L COA=DENT PR FLOR   CONS21CPL21LD    (F
  558. ;  1E),COLRDBUF5:    JIVE
  559. RDBUF1    RAC,AND GET NEXQU    EARACTER
  560. RVERSISUF6:    CPPUNCHONTR135; EST Rt sDRV1A1MAXJIVE
  561. NZ,RDBUFAS
  562.  RITE     THEN JUMP21PUSH    BCRITE    SAVE REGISTERS21CALL    AGAIN    RAC,MOVE CURS ASO NEXT OUTORMAXPOS
  563. ;NBCRITE    RESTORE REGISTERS21POS
  564. ;N1    WRITE    GET :)T OUTORMAXPUSH    1    WRITE    SAVE IT AGAIN21PUSH    BCRITE    SAVE EM TCOU==/MAXIMURK    RNE LENGTHDTVERSISUF7:    LD    A,PEARAC,TEST LAST K HER ECHOED 21OR    COL    JIVE
  565. Z,RDBUF8    K L YES THEN JUMP21RACT    HLRITE    RACTREMENT PO;
  566. ;;S BN DD    A,(1    W)    RAC,GET K HES B    DEC    BRITE    DECREMENTOUTINE COUNTER
  567. MAXPUSH    1    WRITE    SAVE REGISTERS21PUSH    BC21CALL    OUT
  568. ;   OSRAC,A=00EUTTE 2ARACTER
  569. MAXPOS
  570. ;NBCRITE    RESTORE REGISTERS21POS
  571. ;N1    W21JIVE
  572. RDBUF7RITE    stemEST END OUTOR
  573. RVERSISUF8:    POS
  574. ;NBCRITE    RESTORE EM TCOU==/MAXOUTINE LENGTHDTVERSISUF9:    JIVE
  575. RDBUF5    RAC,AND GET NEXQU    EARDTVERSISUFA:    CPPUNCHONTU135; EST DFDE OUTORMAXJIVE
  576. NZ,RDBUFSTATK LBY SETHEN JUMP21POS
  577. ;N1    WRITE    GET :)T OUTORMAXCALL    AGAIN    RAC,MOVE CURS ASO NEXT OUTOR
  578. RVERSISUFB:    JIVE
  579. RDBULATLRAC,AND :)T R012NE AGAINDTVERSISUFC:    CPPUNCHONTX    RAC,TEST DFDE OUTORMAXJIVE
  580. NZ,RDBUFES
  581.  RITE     THEN JUMPDTVERSISUFD:S IMOP    HLRITE    GET :)T OUTORMAXLD    A,PEARAC,TEST IF LAST K HER DFD5HR    OR    COL    JIVE
  582. Z,RDBUFPEAK L YES :)T R012NE AGAIN21PUSH    1    WRITE    SAVE ONE    NTER
  583. MAXCALL    DEL
  584. ;   OSIME
  585.     RLETE LAST K HER OUTORMAXJIVE
  586. RDBUFD    RAC,TEST LAST K HER DFD5HRRDBUFE:    CP    RUB
  587. SERAC,TEST DFDE LAST K HES B    JIVE
  588. NZ,RDBUENTRS
  589.  RITE     THEN JUMP21JIVE
  590. DOBA IF RAC,Part of delete key fix
  591. ;Remove code for echoing deleted character--B./C
  592. ;    LD    A,PEARAC,TEST FIRSQU    EARACTER OUTOR
  593. ;    OR    COL;    JIVE
  594. Z,RDBUF9    K L YES, DOBY SE; -TE
  595. ;    LD    A,(1    W)    RAC,GET LAST K HES B;    DEC    HLRITE    DECREMENT PO;
  596. ;;R OUTOR
  597. ;    DESTATPEAIME
  598.     RCREMENT EM TCOU==
  599. ;    JIVE
  600. RDBUFG    RAC,ECHO LAST K HES BRDBUENTR:    CPPUNCHIVE
  601. RAC,TESLAY
  602. AR
  603. L NA.UETH321JIVE
  604. Z,RDBUFIS
  605.  YES, THED 
  606. XI      PUNCHS
  607. ;NSECON135; EST EM TFE5HR    JIVE
  608. Z,RDBUFIS
  609.  YES THEN EXI          INC    HLRITE    RACTREMENT PO;
  610. ;;S BN DD    (1    W),ARITE    AND SAVE K HES B    INC    BRITE    RACTREMENTOUTINE COUNTER
  611. RVERSISUFG:    PUSH    1    WRITE    SAVE REGISTERS21PUSH    BC21CALL    OUT
  612. ;   OSRAC,ECHOTE 2ARACTER
  613. MAXPOS
  614. ;NBCRITE    RESTORE REGISTERS21POS
  615. ;N1    W21CPPUNCHONTC135; EST P2DOS S. -OT21LD    A,PEARAC,GET EM TCOUNT21JIVE
  616. NZ,RDBUH        K L NO WAR    HL=PT THEN JUMP21CP    1135; ESLAY
  617. ONTC IS FIRSQU    EARACTER EM T21JS
  618. ;NZ,RAMLOWNUMB INCYES THEN EXECUS ONS1AR    HL=P      RDBUFH:    CPPUNCH135; EST EM TLENGTH=ECIMUMOUTINE LENGTH21JIVE
  619. NZ,RDBUF9    K LBY SETHEN GET NEXQU    EARACTER
  620. RVERSISUFI:    POS
  621. ;N1    WRITE    GET :)T EM T- 1
  622. N DD    (1    W),PEARAC,SAVE EM TCOU==21LD    A,CRAT ROAD TEM RIA NA.UETH321JS
  623. ;NWRCONRITE    AND ECHO I      SEC    ******************************************************************************
  624. ;*                                          *
  625. ;*    Y IFWL
  626. ; ANCTIONS                                  *
  627. ;*                                          *
  628. ;******************************************************************************
  629. ER N
  630. ; 3ROUTO VERSPRTUMBER
  631. ER N2D2MND12:    LD    A,2S:RITE    
  632. ;   OD.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4ON D DMAXJIVE
  633. ELEAD25ARITE    AND EXITHIS BM YT DISKCKCMY AELEAND13:    21IF5)SDSK
  634. ;detect change between single and double sided disks if this function is
  635. ;supSIZMPted.--B./CMAXCALLFLTGRA    
  636. MAXENDILATL21LD    HL,0    RAC,LOAD ZERO21LD    ( NO IN),1    WS
  637.  ALL DRIVES LOGED OUT21LD    (DSKRO),1    WS
  638.  ALL DRIVESEM W/WRITE21LD    HL,RAMLOWNUMB 80H    ND)NTSET UP DMAC=2ESS21LD    (D.D),1    WS
  639.  AND SAVE IT21CALL    STDDSKECDCO PEADM CALL21XOR    ARITE    
  640. ;   ODEFAULT DCES) = 'A'
  641. MAXLD    (SIZ003),AS
  642.  SAVE IT21CALLFLLDAS 6RAC,FILE (DRIVE 'A'
  643. MAXLD    A,(SUBOR  G)    K LCONS SUBMIT OR   CONS21JIVE
  644. ELEAD25ARITE    EXIT(:EARCH FOR FILEY AELEAND17:    CALLFLLDRVRITE    FILE (DRIVE FROM FCB21LD    A,(IX+0)    K LCONS DRIWARMUMBER FROM FCB21SUPEA'?'135; EST IF '?'
  645. MAXJIVE
  646. Z,ELEAD17PEAK LESESO ALL ENTRIES MATCH21LD    A,(IX+14)    K LCONSIME BYTE21CP    '?'135; EST IF '?' 21JIVE
  647. Z,ELEAD17AS
  648.  YES, JUMP21LD    (IX+14),0    K L LOAD READ F BYTE WITH ZEROOR SD VN17A:    LD    AM W5    RAC,TEST FIRST 15 ITEMS IN FCBOR SD VN17B:    CALLFLARC01GDO SEARCH
  649. 2D2D VN17C:    LD    HL,(DIRBUF)    K L COPY DIRLINACK0A BUENTRER 21LD    DE,(D.D)    K L TO D.D CHPN DD    BCM WNO ERITE    DIRLINACK0A=1NO E BYTES 21LDIR21RET                ; EXIT(:EARCH FOR NEXT OCCURENCE FILEY AELEANDD):    LD    IX,(DCOPY)    K LCONS LAST FC
  650. ; 16USED LY LARCH
  651. MAXCALLFLLDRVRITE    SELEXT DCES) FROM FCB21CALLFLARCNRITE    SEARCH NEXT FILE MATCH21JIVE
  652. ELEAD17STATRAC,AND COPASIRLINACK0A TO D.D CHPSEC     DELETE FILEY AELEAND19:    CALLFLLDRVRITE    FILE (DRIVE FROM FCB21CALL    DFDRT ; ; -TE FILEOR SD VN19A:    LD    A,(SEAREX)    K LCONS EXIT BYTE 00=FILE FOUND,0FTUSONOT21JIVE
  653. ELEAD25ARITE    AND EXITHIS BRENAME FILEY AELEAND23:PUNCHALLFLLDRVRITE    FILE (DRIVE FROM FCB21CALL5)NAMRITE    RENAME FILE21JIVE
  654. ELEAD19ARITE    AND EXITHIS B3ROUTO LOGIN VECTRS B;OR SMNDION D:    LD    HL,( NO IN)    K LCONS LOGIN VECTRS BELEADION DA:    LD    (PEXIT),1    WS
  655.  SAVE IT21RET                ; AND EXITHIS B3ROUTO CURRENT DCES)Y AELEAND25:    LD    A,(SIZ003)    K LCONS CURRENT DCES)OR SD VN25A:    J212CXIT    RAC,AND EXITHIS B3ROUTO ALV VECTRS B;OR SMND27:    LD    HL,(ALV)    K LCONS ALLOCMINI VECTRS B    JIVE
  656. ELEADION DARITE    AND EXITHIS B3ROUTOY IFWL R/O VECTRS B;OR SMND29:    LD    HL,(DSKRO)    K LCONSY IFWL R/O VECTRS B    JIVE
  657. ELEADION DARITE    AND EXITHIS BCHAAA3 STATUSY AELEANDET UUU:    CALLFLLDRVRITE    FILE (DRIVE FROM FCB21CALLPUNCH
  658. RITE    CHAAA3 STATUS21JIVE
  659. ELEAD19ARITE    AND EXITHIS B3ROUTO DRIVE INPUE
  660. ;
  661. ELEAND31:    LD    HL,(IXP)S
  662.  GET DRIVE TABLE21JIVE
  663. ELEADION DARITE    AND EXIT(:ET/GET USER CODEY AELEAND32:    LD    A,RT ; GET USER CODE21RACT    A135; EST IF 0FFH21LD    A,(USER)    K LCONS OLD USER CODE21JIVE
  664. Z,ELEAD25AS
  665.  IF 0FTUSOTHED 
  666. XI      N DD    A,RT ; GET 1    W+USER CODE21AND    01 (B PU T MASK I      N DD    (USER),AS
  667.  SAVE IT21RET                ; AND EXITHIS BCOMPUTE FILE (F2E COMMANDY AELEAND35:    CALLFLLDRVRITE    FILE (DRIVE FROM FCB21CALL    FILSZRITE    COMPUTE FILE (F2E21JIVE
  668. ELEAD19ARITE    AND EXIT(:ET 2DOM RECORD COUNTY AELEAND36:    LD    HL,32RITE    
  669. ;   OONE    NONSOLO NEXT RECORD21CALLPUNCHALRRSTATRAC,CALCULATE 2DOM RECORD COUNT000 DRRC:    LD    (IX+33),D    K L AND SAVE 2DOM RECORD COUNT21LD    (IX+34),C21LD    (IX+35),B21RET                ; AND EXITHIS BM YT MULTIPLE LOGIN DRIVE
  670. ;
  671. ELEAND37:    21LD    A,RT ; GET MASK LD5MAXCPL                TA    OMPLEMENT I      N D)
  672. D,A 
  673. MAXLD    A,D    RAC,GET MASK MD5MAXCPL                TA    OMPLEMENT I      N DD    D,COLN DD    1    W,( NO IN)    K LCONS LOGIN VECTRS BN DD    A,RT ; PASSET/OGIN VECTRS B    ANDN DAT RD5MAXLDN D,COLN DD    A,D    RAC,MASK LOGIN VECTRS B    AND    HRITE    MSB21LD    H,COLN DD    ( NO IN),1    WS
  674.  SAVE  NO IN VECTRS B    EX    DE,1    WRITE    USE  NO IN VECTRR AS MASK21LD    HL,(DSKRO)    K LCONS DRIVE R/O VECTRS BN DD    A,RT ; PASK DRIVE R/O VECTRS B    ANDN DAT RD5MAXLDN D,COLN DD    A,D    RAC,MASK DRIVE R/O VECTRS B    AND    HAT RD5MAXLD    H,COLN DD    (DSKRO),1    WS
  675.  SAVE DRIVE R/O VECTRS B;21EXX21IF5)SDSK21CALLFLTDSK21ENDIF21CALLPUNCHLRDSK21EXX21RETSECTO******************************************************************************
  676. ;*                                          *
  677. ;*     ERROR R012NES                                  *
  678. ;*                                          *
  679. ;******************************************************************************
  680. ER N
  681. ; Bad sector error message replaced by read/write error messages--B./C
  682. ; BAD GICR ERROR
  683. ER N
  684. ;BADSEC:    LD    DE,MBADSSTATK L LOAD BAD GICR MESS CONSE
  685. ;    JIVE
  686. VE NRORRITE    OLE CISPLAY ERROR
  687. ER N
  688. ; FILE (                    NER NMALLERR:    LD    DE,MSELAT ROAD FILE (ERROR MESS CONSE
  689.     JIVE
  690. VE NRORRITE    OLE CIPLAY ERROR
  691. ER N
  692. ; /EAD ONLY ERROR
  693. ER N
  694. FILRO:    LD    DE,MFILROS
  695.  LOAD AND AO MESS CONSE
  696. N DD    A,0F (B PU T 
  697. ;   OAND AO MESS CONSE FECT MAXJSB    RROR    RAC,OLE CISPLAY ERROR
  698. ER N
  699. ; Read Error Message--B./CER N
  700. RVE NR:    LD    DE,MRDERR21JIVE
  701. VE NRORHIS BWrite Error Message--B./C
  702. WRTERR:    LD    DE,MWRTER
  703. MAXJIVE
  704. VE NRORHIS BDRIVE READ ONLY ERROR
  705. ER N
  706. RDONLY:    LD    DE,MROAT ROAD DRIVE R/O MESS CONSE
  707. VE NROR:    XOR    ARITE    
  708. ;   ONO AND AO MESS CONSE
  709. SEC    
  710. ; DISPTION BERROR MESS CONSE
  711. SEC     P2DOS ERROR ON D: ERROR MESS CONSE
  712.  PROGUNCTION = NN  [FILE = FILENAME.TYP]Y AERROR:    LDPUNCH,ARITE    SAVE AND AO MESS CONSE FECT MAXPUSH    BC21PUSH    DERITE    SAVE ERROR MESS CONSE PO;
  713. ;;S BPUNCHALLPUNCHROUTRITE    DIPLAY CR/SECON21LD    A,(SIZ003)    K LCONS CURRENT DCES)21ADD    A,'A'RITE    MAKES ASCII21LD    (D VNCES)),AS
  714.  SAVE IT21LD    DE,ND)NTUIVE
  715. K L LOAD MESS CONSE "P2DOS ERROR ON D:"21CALL    MESSRITE    DISPLAY MESS CONSE
  716. S IMOP    DRT ; GET ERROR MESS CONSE PO;
  717. ;;S BPUNCHALL    MESSRITE    DISPLAY MESS CONSE
  718. PUNCHALLPUNCHROUTRITE    DISPLAY CR/SECON21LD    DE,MBFUNC    K L LOAD MESS CONSE "ILES ="21CALL    MESSRITE    DISPLAY MESS CONSE
  719. N DD    A,(FUNCT)    K LCONS
  720. ; ANCTION NUMBER21PUSH    AFRITE    SAVE IT21LD    BCM W00RITE    DISPLAY NUMLLS/ 10021CALL    NUM21LDPUNCHM W0    CDCISPLAY NUMLLS/ 1021CALL    NUM21LD    BCM W0101GALWAYS DISPLAY NUMLLS/ 121CALL    NUM21POS
  721. ;NAFRITE    GET ILES NUMBER21POS
  722. ;NBCRITE    GET AND AO FECT MAXCP    15    RAC,TEST IF FC
  723. ; 16USEREAD RN COMMAND21JIVE
  724. C,ERROR321CP    ION D21JIVE
  725. C,ERROR1
  726. PUNCHS
  727. ;NET UUU21JIVE
  728. Z,ERROR1
  729. PUNCHS
  730. ;N3321JIVE
  731. C,ERROR321CP    3721JIVE
  732. C,ERROR1
  733. PUNCHS
  734. ;N4021JIVE
  735. NZ,ERROR3
  736. ERRORA
  737. LS IMUSH    IX    RAC,YES THEN DISPLAY "FILE ="21SUPEA19135; EST DFDE FILE ILES21JIVE
  738. NZ,ERROR2    K LBY SETHEN JUMP21OR    STATRAC,TEST AND AO FECT MAXJIVE
  739. Z,ERROR2    K L NO FILE R/O THEN JUMP21CALLPUNCHALDIRRITE    GET FC
  740. ; 16FROM DIRLINACK0A BUENTRER
  741. MAXEX    (SP),1    WRITE    SAVE IT
  742. ERROR O
  743. ETN DD    DE,MFILES
  744.  GET MESS CONSE " FILE ="21CALL    MESSRITE    DISPLAY MESS CONSE
  745. S IMOP    HLRITE    GET ONE    NTER FCB21LD    B,8    CDCISPLAY FIS
  746. C8 K HERS21CALL    FILENM21LD    A,'.'AT ROAD '.'
  747. MAXPUSH    1    WRITE    SAVE FC
  748. ; 16ONE    NTER
  749. MAXCALL    WRCONRITE    ECHO I      S IMOP    HLRITE    RESTORE FC
  750. ; 16ONE    NTER
  751. MAXLD    B,3    CDCISPLAY LAST 3 K HERS 
  752. PUNCHALL    FILENM
  753. ERROR3:PUNCHALL    G+000000000000000000000000000000000000000000000000035; EST IF CHARW.R PRNEWTNT21OR    COL    JIVE
  754. Z,ERRORY IFK L NO THEN JUMP21CALL    GET
  755. ;   OSRAC,GET K HES B    JSB    RROR3    RAC,stemEST AGAIN
  756. ERRORIVE
  757. IPUNCHALL    GET
  758. ;   OSRAC,GET K HES B;P2DOS had a bug which did not allow the user to ignore a read/write error
  759. ;by hitting a key other than Control-C. This is the fix.--B./CMAXPUSH    AFRITE    Save it21LD    A,(RETOR  G)    K L Get RETOR  G
  760. MAXOR    COL    JIVE
  761. Z,ERROR521POS
  762. ;NAF21CPPUNCHONTC21RET    NZ
  763. ERROR5:    JS
  764. ;NRAMLOWNUMB INCOLE CO P2DOS S. -OTHIS BDISPTION BD DER N
  765. NUM:    LD    D,-1AT ROAD D V-1
  766. NUMA
  767. L    INC    DRITE    RACTREMENT NUMBER21SUPEASTATCDCIVIDE BY C21JIVE
  768. NC,NUM1    RAC,RITE     FINISHED THEN LOOP21ADD    A,STATRAC,RESTORE LAST VALUE21PUSH    AFRITE    SAVE IT21LD    A,D    RAC,TEST IF "0"21OR    PEARAC,AND IF LEADING ZERO21JIVE
  769. Z,NUM2    RAC,YES, THED 
  770. XIT 21LD    B,D    RAC,
  771. ;   ONO LEADING ZERO 
  772. N DD    A,D    RAC,GET D DMAXADD    A,'0'RITE    MAKES ASCII21PUSH    BCRITE    SAVE REGISTERS21CALL    WRCONRITE    ECHO NUMBER21POS
  773. ;NBCRITE    RESTORE REGISTERS
  774. NUM O
  775. ETS IMOP    ALATLRAC,RESTORE NUMBER
  776. MAXRET                ; AND EXITHIS BDISPTION BFILNAME.TYPY AFILENM:    RACT    HLRITE    RACTREMENT PO;
  777. ;;R FCB21LD    A,(1    W)    RAC,GET K HER FROM FCB21AND    0NUMB 6E01GMASK I      S IMUSH    1    WRITE    SAVE REGISTERS21PUSH    BC21CALL    WRCONRITE    ECHOTE 2ARACTER
  778. MAXPOS
  779. ;NBCRITE    RESTORE REGISTERS21POS
  780. ;N1    W21DJNZ    FILENMRITE    REPEAT B TIMES21RET                ; AND EXITCONIRROR MESS CONS7H
  781. ; Made more meaningful-B./CER N
  782. ;Bad sector message replaced by read/write error messages
  783. ;MBADSCD.DDD    'Bad sector$'
  784. ER N
  785. MSELD.DDD    'Non-existent drive$'
  786. ER N
  787. MFILROD.DDD    'File is '
  788. ER N
  789. MROD.DDD    'Read-Only$'
  790. ER N
  791. ND)NTURD.DDD    'Disk error on '
  792. D VNCES)D.DDD    021VERSIS    DRS    DEP21VERSIS    ' $'
  793. ER N
  794. MBFUNCD.DDD    'Function = $'
  795. ER N
  796. MFILED.DDD    ' PROGile = $'
  797. ER N
  798. MRDERRD.DDD    'Read error$'
  799. ER N
  800. MWRTERD.DDD    'Write error$'
  801. ER N
  802. ; FILE (DISK FROM FCBY ASELDRV:    LD    A,0F (B PU T 
  803. ;   ODISK SELECT DONE OR   CONS21LD    (FLDRV),COLN DD    A,(SIZ003)    K LCONS CURRENT DCES)21LD    (DRIVE),AS
  804.  SAVE IT IN MEMORY
  805. N D)
  806. D,ARITE    SAVE IT IN REGISTER E21LD    A,(IX+0)    K LCONS DRIVE FROM FCB21LD    (FCB0),AS
  807.  SAVE IT21CP    '?'135; EST IF '?'
  808. MAXJIVE
  809. Z,ELEAND1Y IFK L YES, THEN FILE (DRIVE FROM REGISTER E21AND    01 (B PU T MASK DRIVE21LD    A,RT ; TEST IF ZERO21JIVE
  810. Z,SELDR0    K L SELECT DCES) FROM REGISTER E21LD    A,(IX+0)    K LCONS DRIVE FROM FCB21DESTATARITE    DECREMENT DRIVE O
  811. ELDR0:    CALLFLLDAS 6RAC,FILE (DRIVE
  812. N DD    A,(IX+0)    K LCONS DRIVE FROM FCB21AND    0E001GREMOVE DRIVE BITS
  813. N DD    B,ARITE    SAVE REGISTES BN DD    A,(USER)    K LCONS USER NUND)NTU21OR    PEARAC,INSERT USER D VIN FCB21LD    (IX+0),COL5)T                ; AND EXIT
  814.  
  815. A