home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / emulation / woz / ApSources / TRANS
Encoding:
Text File  |  1991-10-31  |  6.0 KB  |  384 lines

  1.     TR ON
  2.     XC    ;Enable 65C02 opcodes
  3. * FileCopy between Apple //e' ProDOS & Archimedes F.S.
  4. * (c) 1991 - Benoit Gilon
  5.  
  6. * ProDOS version 0.2 (16/10/91)
  7.  
  8. * Thanks to: Arlo Guthrie,
  9. *         John Renbourn and Stephan Grossman,
  10. *         Mike Olfield,
  11. *         World Party,
  12. *         Alan Parsons,
  13. *         Wolfang Amadeus Mozart
  14. * for the nice music.
  15.  
  16. * Archimedes equates:
  17.  
  18. LENTHARC =    31    Max length for archimedes filename
  19. ARCEOF =    2    End of file for ADFS read
  20. RISCOPEN EQU    $C000
  21. RISCREAD EQU    $C001
  22. RISCWRITE EQU    $C002
  23. RISCCLOSE EQU    $C003
  24.  
  25. * ProDOS and MLI equates:
  26.  
  27. APPEOF    =    $4C End of file for ProDOS read
  28. CREATE    =    $C0
  29. ONLINE    =    $C5
  30. SETPREFX =    $C6
  31. OPEN    =    $C8
  32. READ    =    $CA
  33. WRITE    =    $CB
  34. CLOSE    =    $CC
  35.  
  36. MLI    EQU    $BF00    MLI entry point
  37. DEVNUM    EQU    $BF30    Most recent accessed device
  38. PFIXPTR EQU    $BF9A    If = 0, no prefix active
  39.  
  40. * Monitor equates:
  41.  
  42. CH    EQU    $24
  43. BASL    EQU    $28
  44. GOTOCX    EQU    $FBB4
  45. INPBUF    EQU    $0200    Input line buffer
  46. HOME    EQU    $FC58
  47. COUT    EQU    $FDED
  48. PRBYTE    EQU    $FDDA
  49. RDKEY    EQU    $FD0C
  50. GETLN1    EQU    $FD6F
  51. CROUT    EQU    $FD8E
  52.  
  53. * Harware equates
  54. RD80VID EQU    $C01F
  55. OAPKEY    EQU    $C061
  56.  
  57.     ORG $2000
  58.  
  59.     JMP BEGIN
  60. MESSAG
  61. MESS00    ASC    "       Apple/Archimedes copy program",8D
  62.     ASC    "       (c) 1991 Benoit GILON",8D
  63.     HEX    8D
  64.     ASC    "!Apple -> Archimedes -0-",8D
  65.     ASC    "!Archimedes -> Apple -1-",8D
  66.     HEX    8D
  67.     ASC    " : ",00
  68. MESS01    HEX    8D8D
  69.     ASC    "!Name of Archimedes file :",8D00
  70. MESS02    ASC    "!Name of Apple file : ",00
  71. MESS03    HEX    8D
  72.     ASC    "!Ooops : error ",00
  73. MESS04    HEX    8D
  74.     ASC    "Well done!",00
  75. MESS05    ASC    " another ? (Y/N) ",00
  76. MESS06    ASC    "N"
  77.     HEX    8D8D
  78.     ASC    "!Au revoir/Bye/Adios/Auf wiedersehen",8D
  79.     HEX    8D00
  80. ]M0    EQU    MESSAG/256
  81. ]M1    EQU    MESS06/256
  82.     ERR    ]M1-]M0
  83.     DS    \
  84. * Macro to easier Arc filename typing:
  85. MESSAG2
  86. MESS10    ASC    "<Obey$Dir>.",00
  87. MESS11    ASC    "<Woz$Dir>.",00
  88.  
  89. * -> Ensure prefix active:
  90. BEGIN    LDA    PFIXPTR
  91.     STA    REMPFIX Remember
  92.     BNE    DEBUT
  93.     LDA    DEVNUM    Get volume name
  94.     STA    UNIT     of most recent
  95.     JSR    MLI     accessed device
  96.     DFB    ONLINE
  97.     DA    PONLINE
  98.     BCS    DEBUT
  99.     LDA    PATHNAME+1 Set new prefix
  100.     AND    #$0F    Isolate length nibble
  101.     INC
  102.     STA    PATHNAME
  103.     LDA    #"/"
  104.     STA    PATHNAME+1
  105.     JSR    MLI
  106.     DFB    SETPREFX
  107.     DA    PSETPFX
  108.  
  109. DEBUT    JSR    HOME
  110.     LDX    #0    Welcome banner
  111.     JSR    PRINT    Output it
  112. ]LOOP    JSR    RDKEY
  113.     EOR    #"0"
  114.     CMP    #1+1
  115.     BCS    ]LOOP
  116.     STA    SENSCOP
  117.     EOR    #"0"
  118.     JSR    COUT
  119. * -> Enter Archimedes filename:
  120.     LDX    #1
  121.     JSR    PRINT
  122.     JSR    MYGETLN1
  123.     CPX    #LENTHARC+1
  124.     BCC    :0
  125.     LDX    #LENTHARC
  126. :0    LDA    #0
  127.     BEQ    :1    Always
  128. ]LOOP    LDA    INPBUF,X
  129.     AND    #$7F
  130. :1    STA    ANAME,X
  131.     DEX
  132.     BPL    ]LOOP
  133. * -> Enter Apple ProDOS filename:
  134.     LDX    #2
  135.     JSR    PRINT
  136.     JSR    GETLN1
  137.     CPX    #64+1    No more than
  138.     BCC    :2
  139.     LDX    #64
  140. :2    STX    PATHNAME
  141.     LDX    #0
  142.     BEQ    :3    Always
  143. ]LOOP    LDA    INPBUF,X
  144.     STA    PATHNAME+1,X
  145.     INX
  146. :3    CPX    PATHNAME
  147.     BCC    ]LOOP
  148. * -> Do the copy:
  149.     LDA    SENSCOP
  150.     BNE    :4    Arc to Apple
  151.     JSR    APTOARC
  152.     BRA    :5
  153. :4    JSR    ARCTOAP
  154. :5    BCC    :6    Carry set on error
  155.     LDX    #3
  156.     JSR    PRINT
  157.     LDA    ERROR
  158.     JSR    PRBYTE
  159.     BRA    :7
  160. :6    LDX    #4
  161.     JSR    PRINT    Congratulations
  162. :7    LDX    #5
  163.     JSR    PRINT    Give another try
  164. ]LOOP    JSR    RDKEY
  165.     CMP    #"z"+1
  166.     BCS    :8
  167.     CMP    #"a"
  168.     BCC    :8
  169.     AND    #$DF
  170. :8    CMP    #"N"
  171.     BEQ    :9
  172.     CMP    #"Y"
  173.     BNE    ]LOOP
  174.     JMP    DEBUT
  175. * -> Restore initial prefix setting on exit
  176. :9    LDA    REMPFIX
  177.     BNE    :99
  178.     STA    PATHNAME A=0
  179.     JSR    MLI
  180.     DFB    SETPREFX
  181.     DA    PSETPFX
  182. :99    LDX    #6
  183.     JMP    PRINT
  184.  
  185. * Print a message to screen
  186. PRINT    LDA    OFFSET,X
  187.     LDX    #0
  188.     STA    :0+1
  189. :0    LDA    MESSAG,X
  190.     BEQ    :1
  191.     JSR    COUT
  192.     INX
  193.     BNE    :0    Always
  194. :1    RTS
  195.  
  196. * Archimedes to Apple file copy routine
  197. ARCTOAP CLC        ;For read only
  198.     LDX    #ANAME
  199.     LDY    #>ANAME
  200.     JSR    RISCOPEN Open ADFS file
  201.     BCS    :0
  202.     JSR    MLI
  203.     DFB    CREATE
  204.     DA    PCREATE
  205.     JSR    MLI    Open ProDOS file
  206.     DFB    OPEN
  207.     DA    POPEN
  208.     BCC    :3
  209.     JSR    RISCCLOSE
  210.     SEC
  211. :0    STA    ERROR
  212.     RTS
  213. :3    LDA    OPREFNM Update ref. num.
  214.     STA    WRREFNM ; into parm. tables
  215.     STA    CLREFNM
  216. ]LOOP    LDX    #MYBUFFER
  217.     LDY    #>MYBUFFER
  218.     LDA    #0    ;Means 256 bytes wanted
  219.     JSR    RISCREAD
  220.     BCC    :1
  221.     STA    ERROR
  222.     EOR    #ARCEOF ADFS file EOF?
  223.     BNE    :2
  224.     CLC
  225. :2    PHP
  226.     JSR    MLI    Close ProDOS file
  227.     DFB    CLOSE
  228.     DA    PCLOSE
  229.     JSR    RISCCLOSE
  230.     PLP
  231.     RTS
  232. :1    STA    WRBYTES
  233.     LDX    #0
  234.     TAY
  235.     BNE    :A
  236.     INX
  237. :A    STX    WRBYTES+1
  238.     JSR    MLI
  239.     DFB    WRITE
  240.     DA    PWRITE
  241.     BCC    ]LOOP
  242.     STA    ERROR
  243.     BCS    :2    Always
  244.  
  245. * Apple to Archimedes copy routine
  246. APTOARC JSR    MLI    Open ProDOS file
  247.     DFB    OPEN
  248.     DA    POPEN
  249.     BCC    :0
  250.     STA    ERROR
  251.     RTS
  252. :0    LDA    OPREFNM
  253.     STA    RDREFNM
  254.     STA    CLREFNM
  255.     SEC        ;Open for writing
  256.     LDX    #ANAME    ADFS file
  257.     LDY    #>ANAME
  258.     JSR    RISCOPEN
  259.     BCC    :1
  260.     STA    ERROR
  261.     PHP
  262. ]GOERR    JSR    MLI
  263.     DFB    CLOSE
  264.     DA    PCLOSE
  265.     PLP
  266.     RTS
  267. :1    JSR    MLI
  268.     DFB    READ
  269.     DA    PREAD
  270.     BCC :3
  271.     EOR    #APPEOF ProDOS file EOF?
  272.     BNE    :2
  273.     CLC
  274. :2    STA    ERROR
  275.     PHP
  276.     JSR    RISCCLOSE
  277.     JMP    ]GOERR
  278. :3    LDX    #MYBUFFER
  279.     LDY    #>MYBUFFER
  280.     LDA    RDBYTES
  281.     JSR    RISCWRITE
  282.     BCC    :1
  283.     BCS    :2
  284.  
  285. * Subroutine to enter an Arc FileSwitch pathname:
  286. MYGETLN1 LDX    #0
  287. BCKSPC    TXA
  288.     BEQ    NXTCHAR
  289.     DEX
  290. NXTCHAR JSR    RDKEY
  291.     CPX    #0    Only valid at beginning
  292.     BNE    :2    of line
  293.     BIT    OAPKEY    Test Open Apple key
  294.     BPL    :2    not pressed
  295.     CMP    #"W"
  296.     BEQ    :1
  297.     CMP    #"O"
  298.     BNE    :2
  299.     LDY    #0
  300.     HEX    2C    Skip next 2 bytes
  301. :1    LDY    #1
  302.     LDA    OFFSET2,Y
  303.     STA    :0+1
  304.     LDY    CH    Restore Y
  305. :0    LDA    MESSAG2,X
  306.     BEQ    NXTCHAR
  307.     STA    INPBUF,X
  308.     JSR    COUT
  309.     INX
  310.     BRA    :0
  311. :2    CMP    #$95    Use Screen char
  312.     BNE    ADDINP
  313.     LDA    (BASL),Y Do 40 column pick
  314.     BIT    RD80VID 80 columns?
  315.     BMI    PICKFIX
  316. ADDINP    STA    INPBUF,X
  317.     CMP    #$8D
  318.     BNE    NOTCR
  319.     JMP    $FD8B
  320. PICKFIX LDY    #$0F    code=  fixpick
  321.     JSR    GOTOCX    Do 80 columns pick
  322.     LDY    CH    Restore Y
  323.     STA    INPBUF,X
  324. NOTCR    JSR    COUT
  325.     LDA    INPBUF,X Check for EDIT keys
  326.     CMP    #$88
  327.     BEQ    BCKSPC
  328.     INX
  329.     BNE    NXTCHAR Always branch
  330.  
  331. SENSCOP DS    1
  332. ERROR    DS    1
  333. REMPFIX DS    1
  334. ANAME    DS    LENTHARC+1 ADFS pathname buffer
  335. PATHNAME DS    64+1
  336.  
  337. * MLI call parameters
  338. PCREATE DFB    7    CREATE parm.
  339.     DA    PATHNAME
  340.     HEX    E3    Full access
  341.     DFB    0    Typeless file
  342.     DW    0    Null aux byte
  343.     DFB    1    Storage type: standard
  344.     DW    0    Unknown create date
  345.     DW    0    Unknown create time
  346.  
  347. POPEN    DFB    3    OPEN parm.
  348.     DA    PATHNAME
  349.     DA    IOBUFFER
  350. OPREFNM DS    1
  351.  
  352. PREAD    DFB    4    READ parm.
  353. RDREFNM DS    1
  354.     DA    MYBUFFER
  355.     DW    256    256 bytes per read call
  356. RDBYTES DS    2    Number of bytes actually read
  357.  
  358. PWRITE    DFB    4    WRITE parm.
  359. WRREFNM DS    1
  360.     DA    MYBUFFER
  361. WRBYTES DW    0    Number of bytes to be written
  362.     DS    2    Number of bytes actually written
  363.  
  364. PCLOSE    DFB    1    CLOSE parm.
  365. CLREFNM DS    1
  366.  
  367. PSETPFX DFB    1    SET_PREFIX parm.
  368.     DA    PATHNAME
  369.  
  370. PONLINE DFB    2    ON_LINE parm.
  371. UNIT    DS    1
  372.     DA    PATHNAME+1
  373.  
  374. OFFSET DFB    MESS00,MESS01,MESS02,MESS03
  375.     DFB    MESS04,MESS05,MESS06
  376.  
  377. OFFSET2 DFB    MESS10,MESS11
  378.  
  379.     DUM    *
  380.     DS    \
  381. MYBUFFER DS    256    Data I/O buffer (Application use)
  382. IOBUFFER DS    1024    Needed by ProDOS
  383.     DEND
  384.