home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / _ / 6502xass / !6502-XAss / Scrap / Source < prev    next >
Text File  |  1996-01-07  |  9KB  |  618 lines

  1. !base = &c900
  2.  
  3. .install_fastload_jmp
  4.         jmp install_fastload
  5. .decrunch_jmp
  6.         jmp decrunch
  7. .load_jmp
  8.         jmp load
  9. .init_disk_jmp
  10.         jmp init_disk
  11. .reset_floppy_jmp
  12.         jmp fast_load_off
  13. .motor_off_jmp
  14.                 jmp motor_off
  15.  
  16. ; -----------------------------------
  17. .install_fastload
  18.  
  19. !ti_listen = &ffb1
  20. !ti_unlisten = &ffae
  21. !ti_send_sec = &ff93
  22. !ti_iec_out = &ffa8
  23. !d_print = &ffd2
  24. !d_set_fls = &ffba
  25. !d_set_nam = &ffbd
  26. !d_open = &ffc0
  27. !d_chkout = &ffc9
  28. !d_clrch = &ffcc
  29. !d_close = &ffc3
  30. !d_input = &ffcf
  31. !d_chkin = &ffc6
  32.  
  33.         ldy #0
  34. .tist_0
  35.         lda #8
  36.         ldx #0
  37.         jsr ti_listen
  38.         lda #&6f
  39.         jsr ti_send_sec
  40.  
  41.         lda #77
  42.         jsr ti_iec_out
  43.         lda #45
  44.         jsr ti_iec_out
  45.         lda #87            ; "m-w"
  46.         jsr ti_iec_out
  47.  
  48.         tya
  49.         jsr ti_iec_out        ; Lowbyte der Adresse
  50.         lda #&04
  51.         jsr ti_iec_out        ; Hibyte
  52.         lda #&1e
  53.         jsr ti_iec_out        ; Menge
  54. .tist_1
  55.         lda floppy_code,y
  56.         jsr ti_iec_out
  57.         iny
  58.         inx
  59.         cpx #&1e
  60.         bne tist_1
  61.         jsr ti_unlisten
  62.         cpy #230
  63.         bcc tist_0
  64.         lda #1
  65.         ldx #8
  66.         ldy #15
  67.         jsr d_set_fls
  68.         lda #4
  69.         ldx #<ts_bef
  70.         ldy #>ts_bef
  71.         jsr d_set_nam
  72.         jsr d_open
  73.         jsr d_clrch
  74.         ldx #50
  75. .ti_wait
  76.         jsr &eeb3
  77.         dex
  78.         bne ti_wait
  79.         rts
  80. .ts_bef
  81.  /tx "m-e"
  82.  /by 0,4
  83.  
  84. ; -----------------------------------
  85. ; -       Floppy - Routinen         -
  86. ; -----------------------------------
  87. .floppy_code
  88.  
  89. !block_mem = &0300
  90.  
  91.         sei
  92.         lda &1c00
  93.         and #&ff - &08
  94.         sta &1c00        ; LED aus
  95.  
  96.         lda #&1a
  97.         sta &1c07        ; fast stepper
  98.  
  99.         jsr &0400 + input - floppy_code
  100.         cmp #0
  101.         bne fl_0
  102.         jmp &eaa0        ; b == 0 => reset
  103. .fl_0
  104.         bpl fl_1        ; b < 128 => tr/sec
  105.         ;cmp #129
  106.         ;beq fl_repeat
  107.  
  108.         cmp #&ff
  109.         bne i_disk
  110.         lda #&fb        ; b == 255 => Motor aus
  111.         and &1c00
  112.         sta &1c00
  113.         ldx #0
  114.         stx z,&20
  115.         dex
  116.         stx z,&3e
  117.         jmp &0400
  118. .i_disk
  119.         lda #2            ; disk init
  120.         sta &1800
  121.         cli
  122.         jsr &d042
  123.         lda #0
  124.         sta &1800
  125.         jmp &0400
  126. .fl_1
  127.         sta z,&06        ; tr/sec
  128.         jsr &0400 + input - floppy_code
  129.         sta z,&07
  130. .fl_repeat
  131.         lda #0
  132.         sta &1800
  133. .fl_read_again
  134.         lda #&80
  135.         sta z,&00
  136.         cli
  137. .fl_2
  138.         lda z,&00
  139.         bmi fl_2        ; gelesen?
  140.         cmp #1            ; Fehler?
  141.         bne fl_read_again    ; ja => nochmal
  142.         sei
  143.  
  144.         ;lda #0
  145.         ;tay
  146.         ;clc
  147. .fl_4
  148.         ;adc &0300,y
  149.         ;iny
  150.         ;bne fl_4
  151.         ;sta &0401 + fl_sum - floppy_code
  152.  
  153.         lda &1c00
  154.         ora #8
  155.         sta &1c00        ; LED an
  156.  
  157.         lda #0
  158.         sta &0401 + fl_3 - floppy_code
  159.  
  160.         lda #2
  161.         sta &1800
  162. .fl_3
  163.         ldy #0
  164.         lda block_mem,y
  165.         jsr &0400 + output - floppy_code
  166.         inc &0401 + fl_3 - floppy_code
  167.         bne fl_3
  168. .fl_sum
  169.         ;lda #0
  170.         ;jsr &0400 + output - floppy_code
  171.         lda #0
  172.         sta &1800
  173.         jmp &0400
  174. ; -----------------------------------
  175. !bank_bits = &02            ; VIC bank
  176.  
  177. .output
  178.         sta &0401 + byte - floppy_code
  179.         ldx #4
  180. .ou_1
  181.         rol &0401 + byte - floppy_code
  182.         rol
  183.         rol &0401 + byte - floppy_code
  184.         rol
  185.         and #&03
  186.         tay
  187.         lda &0400 + s_tab - floppy_code,y
  188. .ou_2
  189.         ldy &1800
  190.         bpl ou_2
  191.         sta &1800
  192. .ou_3
  193.         ldy &1800
  194.         bmi ou_3
  195.         dex
  196.         bne ou_1
  197.         rts
  198. .s_tab
  199.  /by &0a, &08, &02, &00
  200.  
  201. ; -----------------------------------
  202. .input
  203.         ldx #4
  204. .in_1
  205.         lda &1800
  206.         bpl in_1
  207. .in_2
  208.         lda &1800
  209.         bmi in_2
  210.         lda &1800
  211.         lsr
  212.         rol &0401 + byte - floppy_code
  213.         lsr
  214.         lsr
  215.         rol &0401 + byte - floppy_code
  216.         dex
  217.         bne in_1
  218. .byte
  219.          lda #0
  220.          rts
  221. ; -----------------------------------
  222. .read_block
  223.  
  224. .rb_0
  225.         lda &dd00
  226.         bmi rb_0
  227.  
  228.         ldy #8
  229. .rb_1
  230.         dey
  231.         bne rb_1
  232. .rb_2
  233.         jsr read_byte        ; block lesen
  234.         sta &0400,y        ; in puffer puffen
  235.         iny
  236.         bne rb_2        ; 256 Bytes
  237.         ;jsr read_byte
  238.         ;sta summe + 1
  239.         ;lda #0
  240.         ;tay
  241.         ;clc
  242. .rb_3
  243.         ;adc &0400,y
  244.         ;iny
  245.         ;bne rb_3
  246. .summe
  247.         ;cmp #0
  248.         ;beq rb_end
  249.         ;lda #129
  250.         ;jsr send_byte
  251.         ;jmp read_block
  252. .rb_end
  253.         ;ldx #0
  254. .r
  255.         ;jsr &eeb3
  256.         ;dex
  257.         ;bne r
  258.  
  259.         rts
  260. ; -----------------------------------
  261.  /align
  262. .send_byte
  263.         sta s_byte
  264.         ldx #4
  265. .sb_1
  266.         asl s_byte
  267.         rol
  268.         asl s_byte
  269.         rol
  270.         and #&03
  271.         tay
  272.         nop
  273.         nop
  274.         nop
  275.         nop    ;
  276.  
  277.         lda send_tab,y
  278.         sta &dd00
  279.         and #255 - 8
  280.         bit z,0
  281.         nop
  282.  
  283.         nop    ;
  284.  
  285.         sta &dd00
  286.         dex
  287.         bne sb_1
  288.         rts
  289. .s_byte
  290.  /by 0
  291. .send_tab
  292.  /by &08 + bank_bits
  293.  /by &18 + bank_bits
  294.  /by &28 + bank_bits
  295.  /by &38 + bank_bits
  296. ; -----------------------------------
  297. .read_byte
  298.         ldx #4
  299. .ry_1
  300.         lda #&08 + bank_bits
  301.         sta &dd00
  302.         nop
  303.         nop
  304.  
  305.         bit z,0
  306.         lda #&00 + bank_bits
  307.         sta &dd00
  308.         nop
  309.         nop
  310.  
  311.         nop
  312.         lda &dd00
  313.         asl
  314.         rol
  315.         rol r_byte + 1
  316.         lsr
  317.         rol r_byte + 1
  318.         dex
  319.         bne ry_1
  320. .r_byte
  321.         lda #0
  322.         rts
  323. ; -----------------------------------
  324. .calc_addy
  325.         clc
  326.         lda &03a1
  327.         adc #252
  328.         sta &03a3
  329.         bcs add_end
  330.         ldx &03a2
  331.         dex
  332.         stx &03a4
  333.         jmp ca_2
  334. .add_end
  335.         lda &03a2
  336.         sta &03a4
  337. .ca_2
  338.         clc
  339.         lda &03a1
  340.         adc #250
  341.         sta &03a7
  342.         bcc add_end_2
  343.         inc &03a8
  344.         rts
  345. .add_end_2
  346.         lda &03a2
  347.         sta &03a8
  348.         rts
  349. ; -----------------------------------
  350. .fast_load_off
  351.         lda #0
  352.         jmp send_byte
  353. ; -----------------------------------
  354. .motor_off
  355.         lda #255
  356.         jmp send_byte
  357. ; -----------------------------------
  358. .init_disk
  359.         lda #254
  360.         jsr send_byte
  361.         ldx #0
  362. .di_2
  363.         dex
  364.         bne di_2
  365.  
  366.         lda &dd00
  367.         and #3
  368.         sta &dd00
  369. .di_1
  370.         lda &dd00
  371.         bpl di_1
  372.         rts
  373. ; -----------------------------------
  374. .set_tr_se
  375.         sty set_ts_1 + 1        ; x = trc, y = sec
  376.         txa
  377.         jsr send_byte
  378.         nop
  379.         nop
  380.         nop
  381.         nop
  382. .set_ts_1
  383.         lda #0
  384.         jsr send_byte
  385.  
  386.         lda &dd00
  387.         and #3
  388.         sta &dd00
  389.         rts
  390. ; -----------------------------------
  391. .load
  392.         jsr calc_addy
  393.         ldx &03a5        ; start track
  394.         ldy &03a6        ; start sector
  395.         jsr set_tr_se
  396.  
  397.         jsr read_block
  398.  
  399.         lda &03a3
  400.         sta z,&fa
  401.         lda &03a4
  402.         sta z,&fb
  403.  
  404.                 ldx &0400
  405.                 ldy &0401
  406.         jsr set_tr_se
  407.  
  408.         ldy #4
  409. .ld_1
  410.         lda &0400,y
  411.         sta (&fa),y
  412.         iny
  413.         bne ld_1
  414.  
  415.         jsr read_block
  416.  
  417.         lda &03a7
  418.         sta z,&fa
  419.         lda &03a8
  420.         sta z,&fb
  421. .ld_2
  422.         ldx &0400
  423.         beq ld_4
  424.         ldy &0401
  425.         jsr set_tr_se
  426. .ld_4
  427.         ldy #2
  428. .ld_3
  429.         lda &0400,y
  430.         sta (&fa),y
  431.         iny
  432.         bne ld_3
  433.         clc
  434.         lda #254
  435.         adc z,&fa
  436.         sta z,&fa
  437.         bcc ld_5
  438.         inc z,&fb
  439. .ld_5
  440.         ldx &0400
  441.         beq ld_end
  442.         jsr read_block
  443.         jmp ld_2
  444. .ld_end
  445.         jsr motor_off
  446.         rts
  447.  
  448. ; -------------------------------------------------------------------------
  449. ; -                              decruncher                               -
  450. ; -------------------------------------------------------------------------
  451. ; entpackt Level-crusher v1.0 speed 4 Dateien (mem => mem)
  452. ;
  453. ; Benutzung:
  454. ;
  455. ;   Zieladresse: &fb / &fc            pck_dest_lo / pck_dest_hi
  456. ;   Start des gepackten Files: &f7 / &f8    pck_file_lo / pck_file_hi
  457. ;   Ende des gepackten Files: pck_end_lo + 1 / pck_end_hi + 1
  458. ;   jsr decrunch
  459. ;
  460. ; vom Packer benutzte Zeropage: &f6...&fe
  461.  
  462. !pck_dest_lo = &fb
  463. !pck_dest_hi = &fc
  464. !pck_file_lo = &f7
  465. !pck_file_hi = &f8
  466.  
  467. .decrunch
  468.         lda z,&f9
  469.         sta pck_end_lo + 1
  470.         lda z,&fa
  471.         sta pck_end_hi + 1
  472.  
  473.                 php
  474.                 tsx
  475.                 stx pck_1 + 1
  476.                 ldx #0
  477.                 stx z,&f9
  478. .pck_22
  479.                 stx z,&fe
  480.                 lda #1
  481.                 jsr pck_3
  482.                 bcs pck_5
  483. .pck_7
  484.                 jsr pck_3
  485.                 bcs pck_6
  486.                 jsr pck_3
  487.                 rol
  488.                 rol z,&fe
  489.                 bpl pck_7
  490. .pck_6
  491.                 tax
  492.                 beq pck_8
  493. .pck_10
  494.                 jsr pck_get_byte
  495.                 ldy #0
  496.                 sta (&fb),y
  497.                 inc z,&fb
  498.                 bne pck_9
  499.                 inc z,&fc
  500. .pck_9
  501.                 dex
  502.                 bne pck_10
  503. .pck_8
  504.                 cpx z,&fe
  505.                 dec z,&fe
  506.                 bcc pck_10
  507.                 stx z,&fe
  508. .pck_5
  509.                 lda #1
  510.                 jsr pck_3
  511.                 bcc pck_11
  512. .pck_13
  513.                 jsr pck_3
  514.                 bcs pck_12
  515.                 jsr pck_3
  516.                 rol
  517.                 bcc pck_13        ; bei einem File unbedingt
  518. .pck_11
  519.                 inx
  520. .pck_12
  521.                 adc #1
  522.                 sta z,&fa
  523.                 txa
  524.                 jsr pck_3
  525.                 rol
  526.                 jsr pck_3
  527.                 rol
  528.                 tay
  529.                 lda #0
  530. .pck_18
  531.                 ldx pck_tab,y
  532. .pck_15
  533.                 jsr pck_3
  534.                 rol
  535.                 rol z,&fe
  536.                 dex
  537.                 bne pck_15
  538.                 dey
  539.                 bmi pck_16
  540.                 cpy #3
  541.                 beq pck_17
  542.                 clc
  543.                 adc #1
  544.                 bcc pck_18
  545.                 inc z,&fe
  546.                 bcs pck_18
  547. .pck_17
  548.                 clc
  549. .pck_16
  550.                 adc z,&fa
  551.                 bcc pck_19
  552.                 inc z,&fe
  553. .pck_19
  554.                 clc
  555.