home *** CD-ROM | disk | FTP | other *** search
-
- .TITLE "BINARY TO HEX-ASCII FORMATTER"
- .PABS
- .LADDR
- .LALL
- .LIMAGE
- ;
- ; SYSTEM EQUATES
- ;
- READBL = 20 ;READ SECTOR
- FCB = 5CH ;INPUT FILE FCB
- COFN = 2 ;CONSOLE CHARACTER WRITE
- BDOS = 5 ;DOS ENTRY POINT
- SDMA = 26 ;SET DMA FUNCTION
- DWRIT = 21 ;WRITE SECTOR FUNCTION
- BUFF = 80H ;READ BUFFER ADDRESS
- WTFN = 9 ;CONSOLE BUFFERED WRITE
- WBOOT = 0 ;WARM BOOT
- CONZ = 26 ;EOF MARKER
- CLSFN = 16 ;CLOSE FILE
- LOGIN = 14 ;LOG-IN DISK
- SEARCH = 17 ;SEARCH FOR FILE
- DELETE = 19 ;DELETE FILE
- MAKEF = 22 ;CREATE FILE
- OPENF = 15 ;OPEN FILE
- START = 100H ;WORK FILE START ADDRESS
- ;
- ;
- .LOC 100H
- LXI SP,STKTOP
- ;
- ; GET PARAMETERS
- ;
- LXI B,33 ;GET HEX FCB
- LXI H,FCB+16;AND MOVE IT
- LXI D,FCBH
- LDIR
- LXI B,3 ;MOVE HEX EXT.
- LXI H,HEXT
- LXI D,FCBH+9
- LDIR
- MVI B,8
- LXI H,FCB+17;CHECH FOR CONSOLE
- AGAIN: MOV A,M ;OR FILE OPERATION
- CPI ' '
- JRNZ AFORT
- INX H
- DJNZ AGAIN
- JMPR RDOPEN
- AFORT: XRA A
- STA CONTST ;SET FLAG FOR HEX FILE
- ;
- ; SET UP HEX FILE
- ;
- LDA FCBH ;GET DRIVE
- DCR A ;AND LOG-IN DISK
- MVI D,0
- MOV E,A
- MVI C,LOGIN
- CALL BDOS
- LXI D,FCBH ;SEARCH FOR FILE
- MVI C,SEARCH
- CALL BDOS
- CPI 255
- JRZ MAKE ;SEE IF FILE EXISTS
- LXI D,FCBH
- MVI C,DELETE
- CALL BDOS ;ERASE FILE
- MAKE: LXI D,FCBH
- MVI C,MAKEF ;CREATE FILE
- CALL BDOS
- CPI 255
- JRNZ OPENZ
- LXI D,DIREM ;ERROR DETECTED
- MVI C,WTFN
- CALL BDOS
- JP WBOOT
- OPENZ: LXI D,FCBH
- CALL SETUP
- XRA A
- STA FCBH+32 ;INIT. SECTOR COUNT
- STA WTPTR ;INIT. POINTER
- ;
- ; OPEN READ FILE
- ;
- RDOPEN: LXI D,FCB
- CALL SETUP
- XRA A
- STA FCB+32 ;INIT. SECTOR COUNT
- MVI A,80H
- STA RIBP ;INIT POINTER
- ;
- ; BINARY TO HEX-ASCII CONVERSION
- ;
- LXI Y,START
- WRITE: CALL CRLF ;WRITE CRLF
- MVI C,11 ;TEST TO ABORT
- CALL BDOS
- ANI 1
- JRZ OKNOW
- MVI C,1
- CALL BDOS
- ANI 127
- CPI 3 ;ABORT
- JRNZ OKNOW
- LXI D,ABORT
- MVI C,WTFN
- CALL BDOS
- JMP WBOOT
- OKNOW: MVI C,':' ;START OF RECORD CUE
- CALL PRINT ;PRINT IT
- CALL PIMP
- LDA EOFLG ;CHECK FOR EOF
- CPI 0
- JRZ WRITE ;GET NEXT RECORD
- CALL CRLF
- MVI C,':'
- CALL PRINT
- MVI B,10
- SST: MVI C,'0'
- CALL PRINT
- DJNZ SST
- CALL CRLF
- JMP CLOSE ;FINISHED
- PIMP: MVI D,0 ;INIT CHECKSUM
- MVI B,24 ;24 BYTES PER RECORD
- MOV A,B ;FILE LENGTH
- CALL PBYTE ;PRINT IT
- PUSH Y
- POP H ;GET ADDRESS
- MOV A,H
- CALL PBYTE ;HIGH BYTE FIRST
- MOV A,L
- CALL PBYTE ;LOW BYTE NEXT
- XRA A ;FILE TYPE=0
- CALL PBYTE ;PRINT IT
- ..W3: CALL READ ;GET DATA BYTE
- CALL PBYTE ;PRINT IT
- INX Y ;ADVANCE ADDRESS
- DJNZ ..W3 ;DEC FILE COUNT
- XRA A
- SUB D ;CALC. CHECKSUM
- JMP PBYTE ;PRINT IT, RETURN
- ;
- ; WRITE A SINGLE BYTE
- ;
- PBYTE: PUSH PSW ;NIBBLE AT A TIME
- RRC
- RRC
- RRC
- RRC
- CALL CONV
- CALL PRINT ;PRINT IT
- POP PSW ;NEXT NIBBLE
- PUSH PSW ;SAVE FOR CHECKSUM
- CALL CONV
- CALL PRINT ;PRINT IT
- POP PSW
- ADD D ;ADD TO CHECKSUM
- MOV D,A ;UPDATE CHECKSUM
- RET
- ;
- ; CONVERT ASCII TO HEX
- ;
- CONV: ANI 0FH ;LOW NIBBLE ONLY
- ADI 90H
- DAA
- ACI 40H
- DAA
- MOV C,A
- RET
- ;
- ; CRLF
- ;
- CRLF: MVI C,0DH
- CALL PRINT
- MVI C,0AH
- ;
- ; CONSOLE AND FILE
- ; CHARACTER WRITE
- ;
- PRINT: PUSH PSW ;SAVE ENVIRONMENT
- PUSH B
- PUSH D
- PUSH H
- LDA CONTST ;TEST FLAG
- CPI 0
- JRZ DISKWR ;FILE ACCESS
- MVI D,0
- MOV E,C ;CHAR. IN C
- MVI C,COFN
- CALL BDOS ;PRINT TO CRT
- PREXIT: POP H ;RESTORE ENVIRONMENT
- POP D
- POP B
- POP PSW
- RET
- DISKWR: LDA WTPTR ;GET POINTER
- CPI 80H ;CHECK FOR ROLLOVER
- JRNZ WTBYT
- CALL DISKCR
- XRA A
- WTBYT: MOV E,A ;WRITE BYTE AT
- MVI D,0 ;BUFF+A
- INR A
- STA WTPTR ;UPDATE POINTER
- LXI H,WTBUF
- DAD D
- MOV M,C ;WRITE CHAR TO BUFF
- JMPR PREXIT ;DONE
- ;
- ; WRITE SECTOR
- ;
- DISKCR: PUSH B
- LXI D,WTBUF
- MVI C,SDMA
- CALL BDOS ;SET WRITE DMA
- LXI D,FCBH
- MVI C,DWRIT ;WRITE SECTOR
- CALL BDOS
- PUSH PSW
- LXI D,BUFF ;RESET DMA ADDRESS
- MVI C,SDMA
- CALL BDOS
- POP PSW
- CPI 0 ;CHECK FOR ERROR
- JRZ BNC2
- LXI D,WEMS1
- MVI C,WTFN
- CALL BDOS ;WRITE ERROR MESSAGE
- JMP WBOOT
- BNC2: POP B
- RET
- ;
- ; CLOSE THE FILE
- ;
- CLOSE: LDA CONTST ;TEST FLAG
- CPI 0
- JNZ WBOOT ;DONE IF CONSOLE
- MVI B,10 ;WRITE EOF MARKER
- OVAGN: MVI C,CONZ
- CALL PRINT
- DJNZ OVAGN
- CALL DISKCR ;FINAL SECTOR
- LXI D,FCBH
- MVI C,CLSFN ;CLOSE FILE
- CALL BDOS
- CPI 255 ;CHECK FOR ERRORS
- JNZ WBOOT ;NO ERROR, DONE.
- LXI D,CLEER
- MVI C,WTFN
- CALL BDOS
- JMP WBOOT
- ;
- ; SET UP FILES TO OPEN
- ;
- SETUP: MVI C,OPENF
- CALL BDOS
- CPI 255 ;CHECK FOR ERRORS
- RNZ
- LXI D,OPNM
- MVI C,WTFN
- CALL BDOS
- JMP WBOOT
- ;
- ; READ A CHARACTER
- ;
- READ: PUSH H
- PUSH D
- PUSH B
- LDA EOFLG
- CPI 0
- JRNZ OUT
- LDA RIBP ;GET POINTER
- CPI 80H
- JRNZ TEMP
- LXI D,FCB
- MVI C,READBL
- CALL BDOS ;READ NEW SECTOR
- CPI 0
- JRZ BNC1
- CPI 1 ;ERROR DETECTED
- JRNZ ALTER ;EOF?
- MVI A,1 ;YES, SET FLAG
- STA EOFLG
- JMPR OUT
- ALTER: LXI D,RDERRM
- MVI C,WTFN
- CALL BDOS
- JMP WBOOT
- BNC1: XRA A
- TEMP: MOV E,A ;READ BYTE FROM
- MVI D,0 ;BUFF+A
- INR A
- STA RIBP ;UPDATE POINTER
- LXI H,BUFF
- DAD D
- MOV A,M ;GET BYTE
- OUT: POP B
- POP D
- POP H
- RET
- ;
- ; STORAGE AND BUFFER
- ;
- RIBP: .BYTE 80H ;READ POINTER
- EOFLG: .BYTE 0 ;EOF FLAG
- CONTST: .BYTE 1 ;CONSOLE FLAG
- WTPTR: .BYTE 0 ;WRITE POINTER
- WTBUF: .BLKB 128 ;WRITE BUFFER
- FCBH: .BLKB 33 ;FCB FOR HEX FILE
- HEXT: .ASCII "HEX" ;DEFAULT EXTENSION
- STACK: .BLKB 64 ;STACK AREA
- STKTOP = .
- ;
- ; ERROR MESSAGES
- ;
- WEMS1: .ASCII [^H0D] [^H0A] "ERROR ON CLOSING FILE" [^H0D] [^H0A] "$"
- CLEER: .ASCII [^H0D] [^H0A] "ERROR ON CLOSING FILE" [^H0D] [^H0A] "$"
- RDERRM: .ASCII [^H0D] [^H0A] "ERROR ON READING FILE" [^H0D] [^H0A] "$"
- DIREM: .ASCII [^H0D] [^H0A] "NO MORE DIRECTORY SPACE" [^H0D] [^H0A] "$
- "
- OPNM: .ASCII [^H0D] [^H0A] "ERROR ON OPENING FILE" [^H0D] [^H0A] "$"
- ABORT: .ASCII [^H0D] [^H0A] "...ABORTED" [^H0D] [^H0A] "$"
- .END
- A>
-
- !
-
- !∩╧@╝■v <⌠@┐ ≥ ⁿaï@çI╧FÅ
- ╧ â╧Γ╧√╧ ∩ ╟╧O ü @ é∩╧Γ∩"»H█ └ÅC ¥Å┐╧⌐∩I╧▀I∩└∩B√╩╧D╧@»J≈└»K╧A┐@╡P┐P ² ƒ@²8┤▐∩J∩`ÅBÅ