home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / amiga / jk_net.lha / 64.asm < prev    next >
Assembly Source File  |  1994-01-03  |  5KB  |  305 lines

  1.     ;jk-net v0.6
  2.     ;copyright by infinity 1993,94
  3.  
  4.  
  5. FNLEN    equ    $b7        ;file name lenght
  6. FA    equ    $ba        ;device number
  7. FNADR    equ    $bb        ;name address
  8.  
  9. IERROR    equ    $0300        ;error
  10. ILOAD    equ    $0330        ;load
  11. ISAVE    equ    $0332        ;save
  12.  
  13. CHKIN    equ    $ffc6        ;open for input
  14. CHKOUT    equ    $ffc9        ;open for output 
  15. CHRIN    equ    $ffcf        ;get char from input
  16. CHROUT    equ    $ffd2        ;put char to output
  17.  
  18. org_ILOAD    equ    $f4a5        ;orginal load
  19. org_ISAVE    equ    $f5ed        ;orginal save
  20.  
  21. searc_m    equ    $f5af        ;print searching for 'name' message
  22. load_m    equ    $f5d2        ;print loading message
  23. save_m    equ    $f68f        ;print saving 'name' message
  24. print_str    equ    $ab1e        ;print string ending null
  25.  
  26. e_fnf    equ    $04        ;FILE NOT FOUND
  27. e_mfn    equ    $08        ;MISSING FILE NAME
  28.  
  29. addr    equ    $fc        ;start address
  30. len    equ    $fe        ;lenght and end address
  31.  
  32. LOAD_code    equ    $01
  33. SAVE_code    equ    $02
  34. DIR_code    equ    $03
  35. QUIT_code    equ    $04
  36.  
  37.  
  38.  
  39. *    equ    52780
  40.  
  41. ; main --------------------------------
  42.  
  43.     lda #<load_main        ;install jk-net
  44.     sta ILOAD
  45.     lda #>load_main
  46.     sta ILOAD+1
  47.     lda #<save_main
  48.     sta ISAVE
  49.     lda #>save_main
  50.     sta ISAVE+1
  51.  
  52.     jsr init_port        ;init_port
  53.  
  54.     lda #<m_cr
  55.     ldy #>m_cr
  56.     jmp print_str        ;print copyright
  57.  
  58. ; chk name ----------------------------
  59.  
  60. chk_name    lda FNLEN            ;check file name lenght
  61.     bne not_0            ;null ?,no -> not_0
  62.     pla
  63.     pla
  64.     ldx #e_mfn        ;missign file name
  65.     jmp (IERROR)        ;error
  66. not_0    cmp #17
  67.     bcc not_16        ;over 16 ?, no -> not_16
  68.     lda #16
  69.     sta FNLEN
  70. not_16
  71.     rts
  72.  
  73. ; send name ---------------------------
  74.  
  75. send_name    ldy #0            ;send name to amiga
  76. send_loop    lda (FNADR),y
  77.     jsr put_char
  78.     iny
  79.     cpy FNLEN
  80.     bne send_loop
  81.     lda #32
  82. c_s_name
  83.     cpy #16
  84.     beq name_sent
  85.     jsr put_char
  86.     iny
  87.     jmp c_s_name
  88. name_sent
  89.     rts
  90.  
  91. ; save main ---------------------------
  92.  
  93. save_main    pha            ;push accu
  94.     lda FA            ;device number
  95.     cmp #7
  96.     beq s_yes_7        ;7 ?,yes -> s_yes_7
  97.     pla
  98.     jmp org_ISAVE        ;orginal save
  99.  
  100. s_yes_7    sei            ;no interrupts
  101.     jsr chk_name        ;check name lenght
  102.     jsr save_m        ;print saving 'name' message
  103.     jsr port_put        ;port output
  104.     lda #SAVE_code        ;SAVE_code to amiga
  105.     jsr put_char
  106.     jsr send_name        ;send name to amiga
  107.  
  108.     lda 43            ;start address
  109.     sta addr
  110.     lda 44
  111.     sta addr+1
  112.  
  113.     sec            ;calculate lenght
  114.     lda 45
  115.     sbc addr
  116.     sta len
  117.     lda 46
  118.     sbc addr+1
  119.     sta len+1
  120.  
  121.     lda len+1            ;send lenght !UPPER! byte 
  122.     jsr put_char
  123.     lda len            ;send lenght !LOWER! byte
  124.     jsr put_char
  125.  
  126.     lda addr            ;send address
  127.     jsr put_char
  128.     lda addr+1
  129.     jsr put_char
  130.  
  131.     lda #11            ;blanck screen
  132.     sta 53265
  133.     lda #$36            ;basic ROM off
  134.     sta $01
  135.  
  136.     ldy #$00
  137. save_loop
  138.     lda (addr),y        ;get char from memory
  139.     jsr put_char        ;send it to amiga
  140.  
  141.     inc $d020
  142.     dec $d020
  143.  
  144.     inc addr            ;increment pointer lower byte
  145.     bne s_chk_len        ;null ?, no -> s_chk_len
  146.     inc addr+1        ;and upper byte
  147. s_chk_len
  148.     lda addr+1
  149.     cmp 46
  150.     bne save_loop
  151.     lda addr
  152.     cmp 45
  153.     bne save_loop
  154.  
  155.     lda #$37            ;basic ROM on
  156.     sta $01
  157.     lda #27            ;screen to normal
  158.     sta 53265
  159.  
  160.     cli
  161.     jmp $a474            ;back to basic
  162.  
  163. ; load main ---------------------------
  164.  
  165. load_main    pha            ;push accu
  166.     lda FA            ;get device number
  167.     cmp #7
  168.     beq yes_7            ;7 ?,yes -> yes_7
  169.     pla            ;pull accu
  170.     jmp org_ILOAD        ;not 7 -> orginal load
  171.  
  172. yes_7    jsr chk_name        ;check name lenght
  173.     ldy #0
  174.     lda (FNADR),y        ;get first char of name
  175.     cmp #36            ;if it '$'
  176.     bne load            ;no -> load
  177.     jmp load_dir        ;yes -> load_dir
  178.  
  179. ; load --------------------------------
  180.  
  181. load    sei            ;no interrupts
  182.     jsr port_put        ;port output
  183.     lda #LOAD_code
  184.     jsr put_char        ;send LOAD_code to amiga
  185.     jsr send_name        ;send name to amiga
  186.     jsr searc_m        ;print searching for 'name' message
  187.     jsr port_get        ;port input
  188.     jsr get_char        ;get lower lenght
  189.     sta len            ;store it
  190.     jsr get_char        ;get upper lenght
  191.     sta len+1            ;store it
  192.  
  193.     lda len            ;check lenght
  194.     bne len_not_0
  195.     lda len+1
  196.     bne len_not_0        ;if not null -> len_not_0
  197.  
  198.     ldx #e_fnf        ;error file not found
  199.     cli
  200.     jmp (IERROR)        ;print it
  201. len_not_0
  202.     jsr load_m        ;print loading message
  203.     jsr get_char        ;get lower address
  204.     sta addr            ;store it
  205.     jsr get_char        ;get upper address
  206.     sta addr+1        ;store it
  207.  
  208.     clc
  209.     lda addr            ;calculate end address
  210.     adc len
  211.     sta len
  212.     lda addr+1
  213.     adc len+1
  214.     sta len+1
  215.  
  216.     lda #11            ;blanck screen
  217.     sta 53265
  218.     ldy #$00
  219. load_loop
  220.     jsr get_char        ;get char from amiga
  221.     sta (addr),y        ;store it to memory
  222.  
  223.     inc $d020
  224.     dec $d020
  225.  
  226.     inc addr            ;increment lower byte
  227.     bne chk_len        ;null ?, no -> chk_len
  228.     inc addr+1
  229. chk_len
  230.     lda addr+1
  231.     cmp len+1
  232.     bne load_loop
  233.     lda addr
  234.     cmp len
  235.     bne load_loop
  236.  
  237.     lda #27            ;screen to normal
  238.     sta 53265
  239.  
  240.     lda len            ;end address
  241.     sta 45
  242.     lda len+1
  243.     sta 46
  244.     jsr 42291
  245.  
  246.     cli
  247.     jmp $a474            ;back to basic
  248.  
  249. ; port put ----------------------------
  250.  
  251. port_put    lda #$ff            ;port output
  252.     sta $dd03
  253.     lda $dd0d
  254.     rts
  255.  
  256. ; port get ----------------------------
  257.  
  258. port_get    lda #$00            ;port input
  259.     sta $dd03
  260.     rts
  261.  
  262. ; init port ---------------------------
  263.  
  264. init_port    lda $dd02            ;init port
  265.     ora #$04
  266.     sta $dd02
  267.     lda $dd00
  268.     and #$fb
  269.     sta $dd00
  270.     rts
  271.  
  272. ;put char -----------------------------
  273.  
  274. put_char    sta $dd01            ;send char
  275. put_wait    lda #$10
  276.     bit $dd0d            ;clear to send next char ?
  277.     beq put_wait
  278.     rts
  279.  
  280. ; get char ----------------------------
  281.  
  282. get_char    lda #$10
  283.     bit $dd0d            ;wait for char
  284.     beq get_char
  285.     lda $dd01            ;get it
  286.     rts
  287.  
  288. ; load dir ----------------------------
  289.  
  290. load_dir    jsr port_put        ;port output
  291.     lda #DIR_code        ;directory code
  292.     jsr put_char
  293.     jsr port_get        ;port input
  294. dir_loop    jsr get_char        ;get char
  295.     beq dir_end        ;end ?, yes -> dir_end
  296.     jsr CHROUT        ;print it
  297.     jmp dir_loop
  298. dir_end    cli
  299.     jmp $a474            ;back to basic
  300.  
  301. ; data --------------------------------
  302.  
  303. m_cr    db    'JK-NET V0.6 (C) INFINITY 1993,94',13,0
  304.     db    0
  305.