home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / px8dir11.lbr / PFDIR11.MZC / PFDIR11.MAC
Encoding:
Text File  |  1993-10-25  |  14.8 KB  |  558 lines

  1.     .Z80
  2.     ASEG
  3.     ORG    0100H
  4. ;
  5. ; EQUATES
  6. ;
  7. BLK    EQU    08EH    ; BLOCK CHAR
  8. CR    EQU    13
  9. LF    EQU    10
  10. EOS    EQU    "$"    ; END OF STRING MARKER
  11. ;
  12. WBOOT    EQU    0    ; WARM BOOT
  13. BDOS    EQU    5    ; BDOS CALL LOCATION
  14. BINASC    EQU    0042BH    ; CONVERT HL --> (IX) ASCII STRING
  15. SCRNPR    EQU    0046BH    ; PRINT (HL) STRING TO SCREEN, END AT 0FFH
  16. LCDOUT    EQU    00483H    ; DIRECT LCD SCREEN OUTPUT
  17. CONINP    EQU    01066H    ; READ THE KB
  18. USERB    EQU    0EA80H    ; START OF USER BIOS ROUTINE
  19. DMA    EQU    USERB-080H    ; DMA AREA
  20. ASCNUM    EQU    DMA+16    ; USE THIS SPACE TO PUT THE ASCII NUMBER
  21. SUSERB    EQU    0F00BH    ; USER BIOS SIZE IN PAGES
  22. MODEFG    EQU    0F0B8H    ; MODE FLAG, MENU..SYS-SCRN...
  23. PF1VEC    EQU    0F1C0H    ; CTRL-PF1 JUMP VECTOR
  24. LCDMOD    EQU    0F2C9H    ; LCD MODE, 0,1,2,OR 3
  25. LCDVS    EQU    0F2CAH    ; V. SCREEN 0 OR 1
  26. USERNO    EQU    0F33BH    ; CURRENT USER NUMBER
  27. SELDSK    EQU    0FDABH    ; SELECT DISK
  28. SETTRK    EQU    0FDAEH    ; SELECT TRACK
  29. SETSEC    EQU    0FDB1H    ; SELECT SECTOR
  30. SETDMA    EQU    0FDB4H    ; SELECT DMA ADDRESS
  31. READ    EQU    0FDB7H    ; READ THE SECTOR
  32. DSKSPC    EQU    0F543H    ; WORK SPACE FOR THE DISK
  33. ;
  34. ; DUMMY CODE USED TO SEE IF THE RELOCATED CODE IS THE CORRECT SIZE
  35. ;
  36.     LD    HL,NOMORE    ; SHOULD BE = 0EC00H
  37. ;
  38. ; START OF PROGRAM
  39. ;
  40.     LD    C,9    ; BDOS PRINT STRING FUNCTION NUMBER
  41.     LD    DE,WELCOM    ; PRINT WELCOME MESSAGE
  42.     CALL    BDOS
  43.     CALL    WAITKB    ; WAIT FOR KB INPUT TO GO ON
  44. ; TEST THE OS ROM DATE
  45.     LD    IX,(WBOOT+1)    ; GET WBOOT JUMP ADDRESS
  46.     LD    BC,060H    ; OFFSET ADDED TO IX
  47.     ADD    IX,BC    ; ADD IN THE OFFSET TO THE WBOOT ADDRESS
  48.     LD    HL,07FD0H    ; STARTING ADDRESS IN ROM    
  49.     LD    DE,TSTROM    ; WHERE TO PUT THE DATA
  50.     LD    BC,7    ; JUST MOVE 7 BYTES
  51.     LD    A,0    ; FROM OS ROM INTO RAM
  52.     CALL    IXJMP    ; JMP (IX)
  53. ; COMPARE THE 2 STRINGS
  54.     LD    DE,TSTSTR-1    ; POINT TO CORRECT STRING
  55.     LD    HL,TSTROM    ; POINT TO WHAT'S IN THE OS ROM
  56.     LD    BC,7    ; TEST ONLY 7 BYTES
  57. TSTLOP:
  58.     INC    DE    ; NEXT BYTE IN STRING
  59.     LD    A,(DE)    ; READ CORRECT BYTE IN
  60.     CPI        ; COMPARE TO (HL),INC HL, DEC BC
  61.     JP    NZ,ROMERR    ; WRONG VERSION
  62.     JP    PE,TSTLOP    ; JMP IF NOT DONE
  63. ;
  64. ; VERSION MATCHES, GIVE CORRECT VERSION MESSAGE
  65. ;
  66.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  67.     LD    DE,ROMOK    ; THE STRING
  68.     CALL    BDOS
  69. ;
  70. ; CHECK FOR USER BIOS HEADER IF ANY
  71. ; IF NONE, JUMP TO THE CHECK FOR USER BIOS SIZE (CHKSIZ)
  72. ;
  73.     LD    A,(HEADER)    ; IF THERE IS A HEADER I'LL FIND "UB" OR "US"
  74.     CP    "U"
  75.     JP    NZ,CHKSIZ    ; IF <> "U", THERE'S NOT A HEADER
  76. ;
  77.     LD    A,(HEADER+1)    ; THIS IS A "B" OR "S"
  78.     CP    "S"    ; IF "S", IT'S SCHEDULER DATA
  79.     JP    NZ,CHK4AB    ; NO, TEST FOR A "B"
  80. ;
  81.     LD    DE,SCHMSG    ; PRINT MESSAGE, THIS HAS SCHEDULER DATA
  82.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  83.     CALL    BDOS
  84.     CALL    WAITKB    ; WAIT FOR KB INPUT
  85.     JP    FEEDER    ; PRINT SEVERAL LINE FEEDS
  86. ;
  87. CHK4AB:
  88.     CP    "B"    ; IS IT A "B" ?
  89.     JP    NZ,CHKSIZ    ; NO,SKIP THE REST
  90. ; TEST FOR CHECKSUM ERROR IN THE HEADER
  91.     LD    HL,HEADER    ; LOOK AT THE START OF THE HEADER
  92.     LD    B,15    ; WE TEST ONLY 15 BYTES
  93.     LD    A,0    ; 0 -(HEADER --> HEADER+15)
  94. ;
  95. CHKLOP:
  96.     SUB    (HL)
  97.     INC    HL
  98.     DJNZ    CHKLOP
  99. ; COMPARE COMPUTED CHECKSUM WITH REAL CHECKSUM
  100.     CP    (HL)    ; DO THEY MATCH, THEY SHOULD
  101.     JP    Z,PRNHDR    ; YES, GO ON
  102. ; NO, PRINT CHECK SUM ERROR MESSAGE
  103.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  104.     LD    DE,CHKERR    ; THE MESSAGE
  105.     CALL    BDOS
  106. ; PRINT THE MESSAGE OF THE USER BIOS FILE NAME FOUND
  107. PRNHDR:
  108.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  109.     LD    DE,NAMMSG    ; FOUND ... NAME MESSAGE
  110.     CALL    BDOS
  111. ;
  112.     LD    B,8    ; PRINT THE NEXT 8 BYTES FROM THE HEADER
  113.     LD    HL,HEADER+2    ; POINT TO THE NAME
  114.     LD    C,2    ; BDOS CON: OUT FUNCTION
  115. ;
  116. OUTLOP:
  117.     PUSH    BC    ; SAVE THE CRITICAL REGs
  118.     PUSH    HL
  119.     LD    E,(HL)    ; GET THE NAME BYTES INTO Ereg FOR PRINTING TO CON:
  120.     CALL    BDOS    ; PRINT THE CHAR
  121.     POP    HL
  122.     POP    BC
  123.     INC    HL    ; POINT TO THE NEXT BYTE
  124.     DJNZ    OUTLOP    ; COUNT DOWN ON Breg TILL 0, ELSE LOOP
  125. ; PRINT THE REST OF THE NAME FOUND MESSAGE
  126.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  127.     LD    DE,NA2MSG    ; THE STRING
  128.     CALL    BDOS
  129. ; WAIT FOR KB INPUT TO CONTINUE
  130.     CALL    WAITKB
  131. ; IS THIS ROUTINE OK TO RELEASE ???
  132.     LD    A,(HEADER+11)    ; RELEASE FLAG, IF =0 DON'T RELEASE
  133.     OR    A    ; TEST BITS
  134.     JP    NZ,RELEASE    ; IF <> 0, OK TO RELEASE
  135. ; ELSE PRINT ERROR MESSAGE
  136.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  137.     LD    DE,LOCKED    ; ERROR MESSAGE
  138.     CALL    BDOS
  139.     CALL    WAITKB
  140.     JP    WBOOT
  141. ;
  142. RELEASE:
  143.     LD    IX,(HEADER+12)    ; GET THE ADDRESS OF THE RELEASE ROUTINE
  144.     CALL    IXJMP    ; RUN THE RELEASE ROUTINE
  145. ; MOVE IN A BUNCH OF SPACES OVERLAY THE OLD HEADER
  146.     LD    HL,SPACES    ; MOVE SPACES
  147.     LD    DE,HEADER    ; INTO THE HEADER AREA
  148.     LD    BC,16    ; 16 BYTES MOVED
  149.     LDIR
  150. ; PRINT A BUNCH OF LINE FEEDS
  151. FEEDER:    LD    C,9    ; BDOS PRINT STRING FUNCTION
  152.     LD    DE,FEED    ; CR,LF,LF,... STRING
  153.     CALL    BDOS
  154. ;
  155. ; CHECK USER BIOS SIZE, IT MUST BE 2 PAGES IN SIZE
  156. ;
  157. CHKSIZ:    LD    A,(SUSERB)    ; GET ITS SIZE IN PAGES
  158.     CP    2    ; IS IT 2 PAGES ???
  159.     JP    NZ,SIZBAD    ; NO, GIVE ERROR MESSAGE
  160. ;
  161. ; USER BIOS IS 2 PAGES, GIVE THE USER THE OPTION TO LOAD/OR NOT TO LOAD
  162. ;
  163.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  164.     LD    DE,OKSIZE    ; SIZE OK MESSAGE
  165.     CALL    BDOS
  166.     CALL    WAITKB    ; WAIT FOR KB INPUT
  167. ;
  168. ; MOVE THE PROGRAM INTO THE USER BIOS AREA
  169. ;
  170.     LD    HL,START    ; MOVE START
  171.     LD    DE,USERB    ; TO 0EA00H
  172.     LD    BC,ZEND-START    ; NUMBER OF BYTES
  173.     LDIR
  174. ;
  175. ; CHANGE THE JUMP VECTOR FOR CTRL-PF-1
  176. ;
  177.     LD    HL,USERB    ; HERE IS THE LOCATION WHERE TO GO
  178.     LD    (PF1VEC),HL    ; CTRL-PF1 VECTOR
  179. ;
  180.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  181.     LD    DE,FINISH    ; PRINT FINISHED MESSAGE
  182.     CALL    BDOS
  183. ;
  184.     JP    WBOOT    ; WARM BOOT
  185. ;
  186. ; GO HERE IF THEY HAVE THE WRONG VERSION ROM
  187. ;
  188. ROMERR:
  189.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  190.     LD    DE,ROMBAD    ; THE ERROR MESSAGE
  191.     CALL    BDOS
  192.     CALL    WAITKB    ; WAIT FOR KB INPUT TO CONTINUE
  193.     JP    WBOOT
  194. ;
  195. ; ERROR MESSAGE FOR THE WRONG USER BIOS SIZE
  196. ;
  197. SIZBAD:
  198.     LD    C,9    ; BDOS PRINT STRING FUNCTION
  199.     LD    DE,BADSIZ    ; THE ERROR MESSAGE
  200.     CALL    BDOS
  201.     CALL    WAITKB    ; WAIT FOR KB INPUT
  202.     JP    WBOOT
  203. ;
  204. ; SUBROUTINES
  205. ;
  206. IXJMP:
  207.     JP    (IX)
  208. ;
  209. ; WAIT FOR A KEY TO BE PRESSED
  210. ;
  211. WAITKB:
  212.     LD    C,9    ; BDOS STRING OUT FUNCTION
  213.     LD    DE,CONT    ; PRINT "PRESS RETURN TO ..."
  214.     CALL    BDOS
  215.     LD    C,1    ; CON: INPUT FUNCTION
  216.     CALL    BDOS
  217.     CP    03H    ; IS IT A CTRL-C ?
  218.     JP    Z,WBOOT    ; YES, QUIT
  219.     RET
  220. ;
  221. ; RELOCATED CODE STARTS HERE
  222. ;
  223. START:
  224.     .PHASE    USERB
  225. ;
  226. ; THIS SECTION OF CODE GETS MOVED UP TO USERBIOS AREA
  227. ;
  228.     LD    A,(MODEFG)    ; SEE WHERE WE WERE CALLED FROM
  229.     AND    037H    ; TEST ONLY PWORD,MENU,SYS SCR,&ALARM
  230.     RET    NZ    ; DON'T RUN IF IN THOSE MODES
  231. ;
  232.     LD    A,(LCDMOD)    ; RUN ONLY IN MODE 0
  233.     OR    A    ; IS A=0 ?
  234.     RET    NZ    ; IF NOT, RETURN
  235. ;
  236.     LD    A,(RFLAG)    ; ARE WE ALREADY RUNNING THIS ?
  237.     OR    A    ; LIKE PRESSING CTRL PF1 TWICE?
  238.     RET    NZ    ; DON'T LET A USER DO THAT, JUST RETURN
  239. ;
  240.     LD    A,0FFH    ; SET RFLAG SHOWING THAT THE PROGRAM IS BEING RUN
  241.     LD    (RFLAG),A    ; SO THAT A RET WILL OCCUR IF PF PRESS AGAIN
  242. ;
  243. ; SAVE WORK SPACE FIRST
  244. ;
  245.     LD    HL,DSKSPC    ; SAVE THIS DISK WORK SPACE
  246.     LD    DE,SAVEWS    ; SAVE INTO MY SCRATCH AREA
  247.     LD    BC,22    ; SAVE 22 BYTES
  248.     LDIR        ; MOVEIT
  249. ;
  250.     CALL    SWAPVS    ; CHANGE V. SCREENS
  251. ;
  252. ; CLEAR SCREEN & DISPLAY HEADER
  253. ;
  254.     LD    C,0CH    ; CLS CHARACTER
  255.     CALL    LCDOUT    ; CLEAR LCD
  256. ;
  257.     LD    B,5    ; PRINT THE STRING 5 TIMES
  258. PLOOP:    PUSH    BC    ; SAVE COUNT IN Breg
  259.     LD    HL,STRING
  260.     CALL    SCRNPR    ; PRINT (HL) STRING TO SCREEN
  261.     POP    BC    ; RESTORE THE COUNT IN Breg
  262.     DJNZ    PLOOP    ; KEEP ON LOOPING
  263. ;
  264. ; READ & PRINT DRIVE A:
  265. ;
  266.     LD    C,0    ; SELECT DRIVE A:
  267.     CALL    SELDSK
  268. ;
  269. ; *** FOR LATER EXPANSION OF THE PROGRAM
  270. ;
  271. ;    LD    (DPB),HL    ; SAVE DPB, USED FOR LATER PROG EXP
  272. ;
  273.     LD    BC,DMA    ; POINT DMA INTO USER BIOS
  274.     CALL    SETDMA
  275. ;
  276.     LD    BC,0    ; SELECT TRACK 0
  277.     CALL    SETTRK
  278. ;
  279.     LD    A,0    ; WE START AT SECTOR #0
  280. ;
  281. ; GET THE NEXT SECTOR ROUTINE
  282. ;
  283. GETSEC:
  284.     LD    (SEC),A    ; STORE THIS NUMBER
  285.     LD    B,0    ; HIGH BYTE = 0
  286.     LD    C,A    ; MOVE SECTOR NUMBER INTO Creg
  287.     CALL    SETSEC    ; SELECT THIS SECTOR
  288. ;
  289. ; READ THE SECTOR INTO DMA
  290. ;
  291.     CALL    READ    ; READ IT INTO DMA
  292. ;
  293.     LD    A,4    ; HEADER COUNT = 4
  294.     LD    (HEADCT),A    ; SAVE THIS COUNT
  295. ;
  296. HEADP:
  297.     LD    A,(DMA)    ; SEE IF USER # = CURRENT AREA
  298.     LD    HL,USERNO    ; LOOK TO CURRENT USER NUMBER
  299.     CP    (HL)    ; ARE THEY = ?
  300.     JR    NZ,NEXTHD    ; NO, SKIP THIS
  301. ;
  302.     LD    A,(DMA+15)    ; DON'T PRINT ANYTHING THAT MIGHT BE A 
  303.     CP    080H    ; A MULTIPLE EXT.  THIS KEEPS THE SAME FILE NAME
  304.     JR    Z,NEXTHD    ; FROM SHOWING UP MORE THAN ONCE.
  305. ;
  306. ; FIND FILE SIZE & PLACE INTO HLreg
  307. ;
  308.     LD    A,(DMA+15)    ; FIND FILE SIZE IN SECTORS
  309.     ADD    A,07H    ; ROUND UP ANY FRACTION OF K BYTES
  310.     RRCA        ; Areg/8=SIZE IN K BYTES
  311.     RRCA
  312.     RRCA
  313.     AND    01FH    ; MASK OUT HIGH GARBAGE CAUSED BY SHIFT
  314.     LD    B,A    ; SAVE FOR LATER ADDITION
  315. ;
  316.     LD    A,(DMA+12)    ; GET FILE SIZE IN 16k BLOCKS
  317.     RLCA        ; A=A*16
  318.     RLCA    
  319.     RLCA    
  320.     RLCA
  321.     AND    0F0H    ; MASK OUT ANY HIGH GARBAGE CAUSED BY SHIFT    
  322.     ADD    A,B    ; A NOW HAS THE FILE SIZE IN K BYTES
  323.     LD    L,A    ; BIN-ASC REQUIRES THIS BE IN THE HLreg
  324.     LD    H,0    ; 255K IS THE MAXIMUM FILE SIZE
  325. ;
  326.     CALL    CNVASC    ; CONVERT HL->ASCII TEXT
  327. ;
  328. ; OK, PRINT IT 
  329. ;
  330.     LD    A,0FFH    ; END OF STRING MARKER
  331.     LD    (DMA+12),A    ; PLACE AT THE END OF THE STRING
  332.     LD    HL,DMA+1    ; POINT TO THE START OF THE STRING
  333.     CALL    SCRNPR    ; PRINT THIS STRING
  334. ;
  335. ; PRINT THE FILE SIZE
  336. ;
  337.     LD    HL,ASCNUM+1    ; POINT TO THE ASCII STRING
  338.     CALL    SCRNPR    ; PRINT THE ASCII NUMBER
  339. ;
  340. ; PRINT A BLOCK
  341. ;
  342.     LD    C,BLK    ; PUT THE CODE FOR A BLOCK INTO Creg
  343.     CALL    LCDOUT    ; PRINT Creg
  344. ;
  345. NEXTHD:
  346.     LD    HL,DMA+32    ; MOVE DOWN NEXT HEADER
  347.     LD    DE,DMA    ; INTO THIS ADDRESS
  348.     LD    BC,96    ; NUMBER OF BYTES MOVED
  349.     LDIR        ; MOVE IT
  350. ;
  351.     LD    HL,HEADCT    ; GET COUNTER
  352.     DEC    (HL)    ; COUNT DOWN
  353.     JR    NZ,HEADP    ; IF NOT = 0, DO MORE
  354. ;
  355. ; ALL THE HEADERS TRIED AT THIS POINT, GO ON TO THE NEXT SECTOR
  356. ;
  357.     LD    A,(SEC)    ; GET THE SECTOR COUNT
  358.     INC    A    ; NEXT SECTOR
  359.     CP    8    ; HAVE WE GONE PAST OUR COUNT ???
  360.     JR    NZ,GETSEC    ; NO, DO SOME MORE
  361. ;
  362. ; READ THE BIT MAP & COUNT THE FREE K BLOCKS
  363. ;
  364.     LD    HL,0F5D9H    ; LOOK AT THE START OF A: BITMAP
  365.     LD    A,(0F291H)    ; FIND THE DISK SIZE IN K BYTES
  366.     LD    D,A    ; Dreg WILL BE USED AS THE BLOCK COUNTER
  367.     INC    D    ; ADD 1 TO Dreg TO TAKE INTO ACCOUNT THE DIR BLOCK
  368.     LD    C,0    ; STARTING COUNT = 0
  369. ; EVERYTHING IS SET UP & READY, LET'S START COUNTING
  370. NEWBYT:    LD    A,(HL)    ; GET A BYTE FROM THE BITMAP
  371.     LD    B,8    ; WE TEST ALL 8 BITS
  372. ; NOW WE SHIFT THROUGH THE BYTE TESTING ALL 8 BITS
  373. BITCHK:    RLCA        ; THE BIT UNDER TEST GOES INTO THE CARRY
  374.     JR    C,NOTFRE    ; BLOCK IN USE, IT'S NOT FREE
  375.     INC    C    ; THIS BLOCK IS FREE, COUNT IT
  376. NOTFRE:    DEC    D    ; THIS IS  OUR COUNT DOWN BLOCK COUNTER
  377.     JR    Z,DONE    ; WHEN D=0, WE ARE DONE COUNTING
  378.     DEC    B    ; COUNT DOWN ON OUR BIT COUNTER
  379.     JR    NZ,BITCHK    ; AS LONG AS B>0, THERE ARE MORE BITS TO TEST
  380.     INC    HL    ; IF ALL BITS ARE TESTED, GO UNTO THE NEXT BYTE
  381.     JR    NEWBYT
  382. ;
  383. ; PRINT "nnnK FREE"
  384. ;
  385. DONE:    LD    L,C    ; PUT THE FREE BLOCK COUNT INTO Lreg
  386.     LD    H,0    ; THE HIGH BYTE IS ALWAYS ZERO
  387.     CALL    CNVASC    ; CONVERT HL --> ASCII NUMBER
  388. ; PRINT IT
  389.     DEC    HL    ; GOTO 1 BEFORE
  390.     LD    A,"("    ; PUT THIS INTO THE STRING
  391.     LD    (HL),A
  392.     CALL    SCRNPR    ; PRINT IT
  393. ; PRINT FREE MESSAGE
  394.     LD    HL,FREMSG    ; POINT TO FREE MESSAGE
  395.     CALL    SCRNPR    ; PRINT IT
  396. ;
  397. ; AT THIS POINT WE SEEM TO BE DONE, JUST WAIT FOR KB INPUT TO RETURN
  398. ;
  399.     CALL    CONINP    ; READ KB
  400. ;
  401. ; OK DONE, RETURN EVERYTHING
  402. ;
  403.     LD    DE,DSKSPC    ; MOVE INTO THIS DISK WORK SPACE
  404.     LD    HL,SAVEWS    ; MY SCRATCH AREA THAT WAS SAVED
  405.     LD    BC,22    ; MOVE 22 BYTES
  406.     LDIR        ; MOVEIT
  407. ;
  408.     CALL    SWAPVS    ; RETURN TO FIRST VS
  409.     LD    A,0    ; RESET RFLAG SO THAT THIS PROGRAM WILL RUN AGAIN
  410.     LD    (RFLAG),A
  411.     RET
  412. ;
  413. ; SUBROUTINES
  414. ;
  415. SWAPVS:
  416.     LD    A,(LCDVS)    ; FIND CURRENT VS
  417.     XOR    1    ; SWAP THE FIRST BIT
  418.     LD    (SELVS+2),A    ; STORE IT AS A SELECTION
  419.     LD    HL,SELVS    ; PRINT THIS ESC STRING
  420.     CALL    SCRNPR    ; PRINT IT
  421.     RET
  422. ;
  423. ; CONVERT THE HLreg INTO A ASCII NUMBER AT DMA+16
  424. ; ON RETURN LEADING ZEROs ARE KILLED AND HLreg POINTs TO THE FIRST 
  425. ; PRINTABLE DIGIT.
  426. ;
  427. CNVASC:
  428.     LD    IX,ASCNUM    ; POINT TO WHERE TO PUT THE RESULT
  429.     CALL    BINASC    ; CONVERT HL TO ASCII NUMBER
  430. ;
  431.     LD    HL,ASCNUM    ; POINT TO THE START ON THE NUMBER
  432.     LD    B,4    ; KILL ONLU THE FIRST 4 DIGITS IF REQUIRED
  433. ;
  434. CNVLOP:
  435.     LD    A,(HL)    ; GET AN ASCII DIGIT
  436.     CP    "0"    ; IS IT A LEADING 0 ?
  437.     JR    NZ,CNVRET    ; IF NOT RETURN
  438.     LD    A," "    ; IF 0, REPLACE WITH A SPACE
  439.     LD    (HL),A
  440.     INC    HL    ; NEXT BYTE
  441.     DJNZ    CNVLOP    ; DO SOME MORE IF B<>0
  442. ;
  443. CNVRET:
  444.     LD    A,0FFH    ; PLACE AN END OF STRING MARKER AFTER
  445.     LD    (ASCNUM+5),A    ; THE LAST DIGIT
  446.     RET
  447. ;
  448. ; THIS IS THE ROUTINE THAT'S CALLED TO RESTORE CTRL-PF1 TO THE
  449. ; DEFAULT VALUE.
  450. ;
  451. OVERWR:
  452.     LD    HL,03970H    ; DEFAULT VALUE FOR CTRL-PF1
  453.     LD    (PF1VEC),HL    ; RESTORE PF1
  454.     RET
  455. ;
  456. ; STRINGS
  457. ;
  458. SELVS:    DB    27,209,0,0FFH
  459. STRING:    DB    "FilenameExtSize",BLK,0FFH
  460. FREMSG:    DB    "K Free)",0FFH
  461. ;
  462. RFLAG:    DB    0    ; IF =0, OK TO RUN THIS PROG, ELSE RETURN
  463. ;
  464. ; THIS NEXT ITEM IS FOR LATER EXPANSION IN THE PROGRAM
  465. ;
  466. ;DPB:    DW    0    ; THE DISK PARAMETER BLOCK
  467. ;
  468. SEC:    DB    0    ; SECTOR COUNT
  469. HEADCT:    DB    0    ; COUNTER FOR THE HEADERS
  470. SAVEWS:    DB    0,0,0,0,0,0,0,0,0,0,0    ; DISK WORK SPACE AREA
  471.     DB    0,0,0,0,0,0,0,0,0,0,0
  472.     DB    "Bob Diaz Was Here"    ; I JUST WANTED TO PUT MY NAME HERE
  473. ;
  474. ; THIS IS THE PROPER HEADER FOR THE USER BIOS AREA
  475. ;
  476. HEADER:    DB    "UB"        ; MARKS A LEGAL HEADER
  477.     DB    "PF1DIR11"    ; ROUTINE NAME
  478.     DB    2        ; SIZE IN PAGES
  479.     DB    255        ; OVERWRITE ALLOWED
  480.     DW    OVERWR    ; ADDRESS OF A RELEASE (OVERWRITE) ROUTINE
  481.     DB    0    ; NOT USED, BUT REQUIRED
  482.     DB    0D3H    ; CHECKSUM OF THE FIRST 15 BYTES 
  483. NOMORE:            ; THIS SHOULD BE AT ADDRESS 0EC00H
  484. ;
  485.     .DEPHASE
  486. ZEND:
  487. ;
  488. TSTSTR:    DB    "5/28/84"
  489. TSTROM:    DB    "1234567"    ; THE DATE ON THE OS ROM IS PLACED HERE
  490. ;
  491. WELCOM:    DB    CR,LF,LF
  492.     DB    "This program is designed to place a DIR "
  493.     DB    "function under the CTRL-PF1 key.  The",CR,LF
  494.     DB    "program requires 2 pages of User BIOS "
  495.     DB    "area in order to function.  In addition",CR,LF
  496.     DB    "your PX-8 computer MUST HAVE the latest "
  497.     DB    "OS ROM (CP/M ver 2.2B).",CR,LF,LF
  498.     DB    EOS
  499. ;
  500. ROMOK:    DB    CR,LF,LF,LF
  501.     DB    "Your PX-8 has the correct version"
  502.     DB    " of the OS ROM in order to use this program."
  503.     DB    CR,LF,EOS
  504. ;
  505. ROMBAD:    DB    CR,LF,LF,LF
  506.     DB    "Your PX-8 has the old version of the "
  507.     DB    "OS ROM.  I can't continue, sorry."
  508.     DB    CR,LF,EOS
  509. ;
  510. SCHMSG:    DB    CR,LF
  511.     DB    "WARNING: You have SCHEDULER DATA in the "
  512.     DB    "User BIOS Area.  Press the RED STOP Key",CR,LF
  513.     DB    "to avoid overwriting it or RETURN to "
  514.     DB    "continue.",CR,LF,EOS
  515. ;
  516. CHKERR:    DB    "((((This is odd, but there's a checksum "
  517.     DB    "error in the header.))))",7,EOS
  518. ;
  519. NAMMSG:    DB    CR,LF
  520.     DB    'I found "',EOS
  521. ;
  522. NA2MSG:    DB    '" Loaded into the User BIOS Area, press the RED STOP',CR,LF
  523.     DB    "KEY to avoid disabling it or RETURN to continue.",CR,LF,LF
  524.     DB    EOS
  525. ;
  526. LOCKED:    DB    CR,LF,LF,LF,LF,LF,LF
  527.     DB    "*** CAN'T RELEASE THIS ROUTINE, IT'S LOCKED! ***"
  528.     DB    CR,LF,7,7,7,EOS
  529. ;
  530. SPACES:    DB    "                "
  531. ;
  532. FEED:    DB    CR,LF,LF,LF,LF,EOS
  533. ;
  534. BADSIZ:    DB    CR,LF,"WARNING: I can't continue, the USER "
  535.     DB    "BIOS Area is NOT set to 2 pages.",CR,LF
  536.     DB    "If you wish to use this program, run "
  537.     DB    "CONFIG and set USER BIOS to 2 pages first.",CR,LF,LF
  538.     DB    EOS
  539. ;
  540. OKSIZE:    DB    CR,LF
  541.     DB    "I am ready to copy the program into the "
  542.     DB    "USER BIOS Area, if that's OK, just press",CR,LF
  543.     DB    "the RETURN Key.  If you don't want this "
  544.     DB    "to happen, press the Red STOP Key.",CR,LF,LF,EOS
  545. ;
  546. CONT:    DB    CR,LF,"(PRESS THE RETURN KEY TO CONTINUE"
  547.     DB    " OR CTRL-C TO ABORT) ",7,EOS
  548. ;
  549. FINISH:    DB    CR,LF,LF,"PROGRAM LOADED: ",7,7,7,7,EOS
  550. ;
  551.     DW    0,0,0,0,0,0,0,0
  552. ;
  553.     DB    "This Program was written by: *** BOB DIAZ *** "
  554.     DB    "From EPSON America  December 24, 1985.",10,13
  555.     DB    "VERSION 1.1 ","$",0FFH
  556. ;
  557.     END    0100H
  558.