home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / cpm / utils / a / 6502sim.lzh / ZX65HOST.MAC next >
Encoding:
Text File  |  1991-01-16  |  4.9 KB  |  174 lines

  1. ;
  2. ; HOST REMAPPING ROUTINES FOR ZX65SYM
  3. ;
  4. ; 11-22-82 (RGF)
  5. ; UPDATED 12/17/82 (RGF)
  6. ;
  7. ;    THIS MODULE IS LINKED TO THE MAIN MODULE (ZXSYM65.REL) TO
  8. ;    PROVIDE MEMORY REMAPPING BETWEEN 6502 AND Z80 MEMORY SPACE.
  9. ;    THIS MODULE CONTAINS AN INITIALIZATION ENTRY POINT THAT IS
  10. ;    CURRENTLY USED TO LOAD AN OPTIONAL FILE FROM DISK VIA THE
  11. ;    CP/M COMMAND LINE.  SYNTAX IS:
  12. ;
  13. ;        ZX65SYM [<FILENAME>] [<ADDRESS>]
  14. ;
  15. ;    WHERE <FILENAME> IS THE NAME OF A 6502 BINARY OBJECT FILE,
  16. ;    AND <ADDRESS> IS ITS LOAD LOCATION. IF <ADDRESS> IS NOT
  17. ;    SPECIFIED, IT DEFAULTS TO THE VALUE SET IN DFLADR (DEFAULT
  18. ;    ADDRESS) SPECIFIED IN AN EQUATE BELOW.
  19. ;
  20. ;    NOTE THAT THE LOADED BINARY FILE MUST NOT OVERWRITE BDOS,
  21. ;    AND CURRENTLY NO TEST IS PERFORMED TO INSURE THIS (SORRY,
  22. ;    BUT TIME IS PRECIOUS); HOWEVER, ONCE THE FILE IS LOADED,
  23. ;    IT MAY FREELY OVERWRITE BDOS, SINCE BDOS IS NO LONGER USED
  24. ;    ANYWHERE WITHIN THE SIMULATOR.  IN NO CASE SHOULD BIOS BE
  25. ;    OVERWRITTEN, SINCE IT IS USED FOR CONSOLE I/O -- UNLESS, OF
  26. ;    COURSE, YOU HARD CODE YOUR CONSOLE DRIVERS INTO THE MAIN 
  27. ;    MODULE.
  28. ;
  29. ;            RON FOWLER
  30. ;            12/17/82
  31. ;
  32. ;
  33. ;
  34.     PUBLIC    AINIT,FETCHA,SENDA,$MEMRY,IFETCH
  35. ;
  36. CR    EQU    13
  37. LF    EQU    10
  38. ;
  39. DFLADR    EQU    1000H        ;DEFAULT RELATIVE LOAD ADRS OF 6502 BIN FILE
  40. DFCB    EQU    5CH        ;DFLT FILE CONTROL BLOCK
  41. BDOS    EQU    5
  42. PRINTF    EQU    9        ;PRINT MSG FUNCTION
  43. OPENF    EQU    15        ;OPEN FILE FUNCTION
  44. READF    EQU    20        ;READ SEQUENTIAL
  45. SDMAF    EQU    26        ;SET DMA ADRS
  46. CLOSEF    EQU    16        ;CLOSE
  47. ;
  48. AINIT:    LDA    DFCB+1        ;CHECK FCB FOR FILE
  49.     CPI    ' '
  50.     RZ            ;RETURN IF NONE
  51.     LXI    D,DFCB+16+1    ;POINT TO OPTIONAL LOAD ADRS
  52.     LDAX    D        ;FETCH FIRST CHAR
  53.     CPI    ' '        ;LOAD ADRS SPECIFIED?
  54.     JZ    NOADR        ;SKIP IF NOT
  55.     LXI    H,0        ;YEP, INIT ADRS VALUE
  56. ;
  57. ;     LOOP HERE COLLECTING OPTIONAL LOAD ADDRESS
  58. ;
  59. ADRLP:    LDAX    D        ;FETCH NEXT CHAR
  60.     INX    D        ;KEEP POINTER AHEAD
  61.     CPI    ' '        ;DONE?
  62.     JZ    STOADR        ;GO PUT ADRS AWAY IF SO
  63.     ANI    0FH        ;ZAP ASCII, (NOTE NO BOUNDS CHECK)
  64.     DAD    H        ;SHIFT TO MAKE ROOM FOR NEW DIGIT
  65.     DAD    H
  66.     DAD    H
  67.     DAD    H
  68.     ORA    L        ;OR LO NYBBLE WITH NEW DIGIT
  69.     MOV    L,A        ;PUT BACK UPDATED ADRS
  70.     JMP    ADRLP        ;MAYBE ANOTHER
  71. STOADR:    SHLD    LODADR        ;PUT AWAY LOAD ADRS
  72. ;
  73. ;    HERE TO OPEN AND LOAD THE 6502 BINARY FILE
  74. ;
  75. NOADR:    MVI    C,OPENF        ;OPEN THE FILE
  76.     LXI    D,DFCB
  77.     CALL    BDOS
  78.     INR    A        ;GOOD OPEN?
  79.     JNZ    OPENOK        ;JUMP IF SO
  80.     LXI    D,NOFEMS    ;ELSE PRINT ERROR MESSAGE
  81.     MVI    C,PRINTF
  82.     CALL    BDOS
  83.     RET
  84. OPENOK:    LHLD    LODADR        ;GET FILE LOAD ADRS
  85.     XCHG
  86.     LHLD    $MEMRY        ;GET BUFFER ADDRESS
  87.     DAD    D        ;OFFSET INTO BUFFER
  88.     XCHG            ;ADRS TO DE
  89.     JMP    LP2        ;GO ENTER READ LOOP
  90. LP1:    MVI    A,1        ;FLAG FILE NOT EMPTY
  91.     STA    RFLAG
  92. LP2:    LXI    H,80H        ;GET NEXT DMA
  93.     DAD    D
  94.     PUSH    H        ;SAVE IT
  95.     MVI    C,SDMAF        ;SET THIS DMA ADRS
  96.     CALL    BDOS
  97.     MVI    C,READF
  98.     LXI    D,DFCB
  99.     CALL    BDOS        ;READ A SECTOR
  100.     POP    D        ;RESTORE NEXT DMA
  101.     ORA    A        ;GOOD READ?
  102.     JZ    LP1        ;THEN CONTINUE
  103.     LXI    D,80H        ;RESET DMA
  104.     MVI    C,SDMAF
  105.     CALL    BDOS
  106.     MVI    C,CLOSEF    ;CLOSE THE FILE
  107.     LXI    D,DFCB        ;(IN CASE MP/M)
  108.     CALL    BDOS
  109.     LDA    RFLAG        ;FOUND ANY RECORDS?
  110.     ORA    A
  111.     RNZ            ;RETURN IF SO
  112.     LXI    D,NODEMS    ;ELSE PRINT EMPTY FILE MSG
  113.     MVI    C,PRINTF
  114.     CALL    BDOS
  115.     RET            ;DONE
  116. ;
  117. ;    6502-RELATIVE MEMORY ACCESS ROUTINES.  FETCH AND SEND
  118. ;    (FETCHA AND SENDA) ARE CALLED WHENEVER A FETCH OR STORE
  119. ;    IS NECESSARY RELATIVE TO 6502 MEMORY; HL=6502 MEMORY
  120. ;    ADRS.  IN THIS IMPLEMENTATION, THE 6502 LOCATION IS OFF-
  121. ;    SET BY THE BUFFER ADDRESS TO MAP 6502 MEMORY INTO Z80
  122. ;    MEMORY, ALLOWING FULL USE OF PAGE 0 INSTRUCTIONS.  NOTE
  123. ;    THAT NO MEMORY RANGE CHECKING IS PERFORMED, THUS A PROGRAM
  124. ;    REFERENCING HIGH 6502 MEMORY MAY WELL OVERWRITE THE BIOS.
  125. ;    ALSO, NOTE THAT THE CP/M BDOS IS NOT USED IN THE CURRENT
  126. ;    VERSION OF THE SIMULATOR, AND CAN THUS BE OVERWRITTEN.
  127. ;
  128. ;
  129. ; FETCH BYTE TO ACCUMULATOR, HL=6502-RELATIVE LOCATION
  130. ;
  131. FETCHA: CALL    POINT        ;OFFSET BUFFER BY 6502 MEMORY
  132.     MOV    A,M        ;FETCH BYTE FROM 6502 MEMORY
  133.     LHLD    HLSAVE        ;RESTORE 6502 ADRS
  134.     RET
  135. ;
  136. ; STORE BYTE IN ACCUMULATOR TO 6502-RELATIVE MEMORY LOC IN HL
  137. ;
  138. SENDA:    CALL    POINT        ;OFFSET BUFFER BY 6502 MEMORY
  139.     MOV    M,A        ;STORE
  140.     LHLD    HLSAVE        ;RESTORE 6502 POINTER
  141.     RET
  142. ;
  143. ; ENTRY TO ALLOW SETUP IF INSTRUCTION FETCH
  144. ; NOTE THAT THIS IS NOT CURRENTLY IMPLEMENTED; PLANS ARE
  145. ; TO USE THIS ENTRY POINT AT SOME TIME IN THE FUTURE TO
  146. ; ALLOW DISTINGUISHING BETWEEN ORDINARY MEMORY REFERENCES
  147. ; AND INSTRUCTION FETCHES.  THIS WOULD ALLOW A FULL 6502
  148. ; HARDWARE SIMULATOR TO BE CONTROLLED BY THIS PROGRAM.
  149. ;
  150. IFETCH:    RET            ;NO SETUP CURRENTLY NEEDED
  151. ;
  152. ; POINT TO TRUE LOCATION
  153. ;
  154. POINT:    SHLD    HLSAVE        ;SAVE 6502 MEMORY PNTR FOR EXIT
  155.     PUSH    D        ;DON'T MODIFY DE
  156.     XCHG            ;GET ADRS IN DE
  157.     LHLD    $MEMRY        ;GET FREE MEMORY POINTER
  158.     DAD    D        ;OFFSET INTO FREE MEMOORY
  159.     POP    D        ;RESTORE AND RETURN
  160.     RET
  161. ;
  162. ;    FILE LOAD ERROR MESSAGES
  163. ;
  164. NOFEMS:    DB    CR,LF,'*** FILE NOT FOUND ***',CR,LF,'$'
  165. NODEMS:    DB    CR,LF,'*** FILE IS EMPTY ***',CR,LF,'$'
  166. ;
  167. RFLAG:    DB    0
  168. HLSAVE:    DW    0
  169. $MEMRY:    DW    0        ;L80 STUFFS FIRST FREE MEM HERE
  170. LODADR:    DW    DFLADR        ;LOAD ADRS OF 6502 BINARY FILE
  171. ;
  172. ;
  173.     END
  174.