Advertisement
GenesisFan64

SUBCPU

Apr 12th, 2022 (edited)
3,148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; =====================================================================
  2. ; Sub CPU
  3. ; =====================================================================
  4.  
  5. ThisCpu     equ $FF8000
  6. BackupRam   equ     $FE0000
  7. numof_stamps    equ     32
  8.  
  9. ; -------------------------------------------
  10. ; Variables
  11. ; -------------------------------------------
  12.  
  13.         rsreset
  14. ;   Structure initialized in initGfxObject
  15. ;   Size is <= $A0 bytes
  16. word_0      rs.w 1
  17.  
  18. ;   Provided by main CPU
  19. word_2      rs.w 1
  20. word_4      rs.w 1
  21. word_6      rs.w 1
  22. word_8      rs.w 1              ;Flip I guess
  23. word_A      rs.w 1              ;Rotate
  24. word_C      rs.w 1              ;True X
  25. word_E      rs.w 1              ;True Y
  26.  
  27. word_20     rs.w 1
  28. word_22     rs.w 1
  29. word_24     rs.w 1
  30. word_26     rs.w 1
  31. word_30     rs.w 1
  32. word_32     rs.w 1
  33. word_34     rs.w 1
  34. word_36     rs.w 1
  35. word_38     rs.w 1
  36. word_3C     rs.w 1
  37. word_40     rs.w 1
  38. word_44     rs.w 1
  39. long_48     rs.l 1
  40. long_4C     rs.l 1
  41. long_50     rs.l 1
  42. long_54     rs.l 1
  43. long_5C_div rs.l 1
  44. long_5C     rs.l 1
  45. long_60     rs.l 1
  46.  
  47.         rsreset
  48. stamp_x     rs.w 1
  49. stamp_y     rs.w 1
  50. stamp_xd    rs.w 1
  51. stamp_yd    rs.w 1
  52. stamp_rot   rs.w 1
  53. stamp_filler    rs.w 1
  54. sizeof_stamp    rs.l 0
  55.  
  56. ; -------------------------------------------
  57. ; RAM
  58. ; -------------------------------------------
  59.  
  60.         rsset $10000
  61. StampBuffer rs.b sizeof_stamp*numof_stamps
  62. Stamp_New   rs.w $100
  63. Save_Data   rs.b $20
  64.  
  65. VBlankFlag  rs.w 1
  66. BiosArgs    rs.l $20
  67. BRAM_Buffer rs.b $640
  68. BRAM_Strings    rs.b $18
  69. ISO_Files   rs.w ($800*$20)
  70. StoredData  rs.b $20000         ;$28100
  71. endof_sub   rs.l 0
  72. ;       inform 0,"CHECA AQUI: %h %h",BRAM_Buffer,BRAM_Strings
  73.        
  74. ; -------------------------------------------
  75. ; Include
  76. ; -------------------------------------------
  77.  
  78.         include "cd/incl/equs.asm"
  79.         include "cd/incl/cdbios.asm"
  80.        
  81. ; =====================================================================
  82. ; -------------------------------------------
  83. ; Header
  84. ; -------------------------------------------
  85.  
  86.         org $6000
  87.         dc.b "MAIN       ",0
  88.         dc.w 0,0
  89.         dc.l 0
  90.         dc.l 0
  91.         dc.l $20
  92.         dc.l 0
  93. @Table:
  94.         dc.w SP_Init-@Table
  95.         dc.w SP_Main-@Table
  96.         dc.w SP_IRQ-@Table
  97.         dc.w 0
  98.         dc.w 0
  99.  
  100. ; =====================================================================
  101. ; -------------------------------------------
  102. ; Init
  103. ; -------------------------------------------
  104.  
  105. SP_Init:
  106.         bclr    #bitWRamMode,(ThisCpu+MemoryMode+1)
  107.         bsr Init9660
  108.         lea (PCM),a0
  109.         move.b  #$80,d3
  110.         moveq   #$F,d5
  111. @Next:
  112.         move.b  d3,Ctrl(a0)
  113.         bsr PCM_Wait
  114.         lea ($FF2001),a2
  115.         move.w  #$FFF,d0
  116. @loop1:
  117.         move.b  #$FF,(a2)
  118.         addq.l  #2,a2
  119.         dbf d0,@loop1
  120.         move.b  d3,Ctrl(a0)
  121.         bsr PCM_Wait
  122.         add.b   #1,d3
  123.         dbf d5,@Next
  124.  
  125. ;       move.w  #$2700,sr
  126. ;       BSET    #1,$FF8033
  127. ;       BSET    #2,$FF8033
  128. ;       BCLR    #3,$FF8033
  129.        
  130.         clr.b   (ThisCpu+CommSub)           ; SubCpu free
  131. ;       move.w  #$2000,sr
  132.         rts
  133.        
  134. ; =====================================================================
  135. ; -------------------------------------------
  136. ; Main
  137. ; -------------------------------------------
  138.  
  139. SP_Main:   
  140.         tst.b   (ThisCpu+CommMain)  ; Check command
  141.         bne SP_Main         ; If NOT clear, loop
  142.         move.b  #1,(ThisCpu+CommSub)    ; Else, set status to ready
  143. @loop:             
  144.         tst.b   (ThisCpu+CommMain)  ; Check command
  145.         beq.s   @loop           ; If none issued, loop
  146.  
  147.         lea (ThisCpu+CommDataM),a6  ; a6 - Input bytes
  148.         lea (ThisCpu+CommDataS),a5  ; a5 - Output bytes
  149.         moveq   #0,d0
  150.         move.b  (ThisCpu+CommMain),d0
  151.         add.w   d0,d0
  152.         move.w  @Command(pc,d0.w),d1
  153.         tst.w   d1
  154.         beq.s   @Null
  155.         jsr @Command(pc,d1.w)
  156. @Null:
  157.         move.b  #0,(ThisCpu+CommSub)    ; Done.
  158.         bra.s   SP_Main         ; Loop
  159.        
  160. ; -------------------------------------------
  161.  
  162. @Command:
  163.         ; $00+ Generic stuff
  164.         dc.w 0              ; NULL
  165.         dc.w 0
  166.         dc.w 0
  167.         dc.w 0
  168.         dc.w Cmd_04-@Command        ; Load data to WordRAM from ISO Filesystem
  169.         dc.w Cmd_05-@Command
  170.         dc.w 0
  171.         dc.w 0
  172.         dc.w Cmd_08-@Command        ; Set WordRAM for MainCPU
  173.         dc.w 0
  174.         dc.w 0
  175.         dc.w 0
  176.         dc.w 0
  177.         dc.w 0
  178.         dc.w 0
  179.         dc.w 0
  180.        
  181.         ; $10+ CD Audio control
  182.         dc.w Cmd_10-@Command        ; Play song, repeat
  183.         dc.w 0              ; Play song, once
  184.         dc.w 0
  185.         dc.w 0
  186.         dc.w Cmd_14-@Command        ; Stop song
  187.         dc.w 0
  188.         dc.w 0
  189.         dc.w 0
  190.         dc.w 0
  191.         dc.w 0
  192.         dc.w 0
  193.         dc.w 0
  194.         dc.w 0
  195.         dc.w 0
  196.         dc.w 0
  197.         dc.w 0
  198.  
  199.         ; $20+ PCM
  200.         dc.w Cmd_20-@Command        ; Load Sample from disc
  201.         dc.w Cmd_21-@Command        ; Set Channel Sample
  202.         dc.w Cmd_22-@Command        ; Set Channel Frequency
  203.         dc.w Cmd_23-@Command        ; Set Channel Panning
  204.         dc.w Cmd_24-@Command        ; Set Channel Envelope
  205.         dc.w Cmd_25-@Command        ; Set Channel ON/OFF
  206.         dc.w Cmd_26-@Command        ; FULLY Clean the PCM Chip
  207.         dc.w 0
  208.         dc.w 0 
  209.         dc.w 0
  210.         dc.w 0
  211.         dc.w 0
  212.         dc.w 0
  213.         dc.w 0
  214.         dc.w 0
  215.         dc.w 0
  216.  
  217.         ; $30+ Stamps
  218.         dc.w Cmd_30-@Command        ; Init stamp system
  219.         dc.w 0
  220.         dc.w 0
  221.         dc.w 0
  222.         dc.w Cmd_34-@Command        ; Modify a stamp
  223.         dc.w 0
  224.         dc.w 0
  225.         dc.w 0
  226.         dc.w Cmd_38-@Command        ; Run ALL stamps
  227.         dc.w 0
  228.         dc.w 0
  229.         dc.w 0
  230.         dc.w 0
  231.         dc.w 0
  232.         dc.w 0
  233.         dc.w 0
  234.        
  235.         ; $40+ BRAM (Save data)
  236.         dc.w Cmd_40-@Command        ; BRAM Init
  237.         dc.w 0
  238.         dc.w 0
  239.         dc.w 0
  240.         dc.w 0
  241.         dc.w 0
  242.         dc.w 0
  243.         dc.w 0
  244.         dc.w 0
  245.         dc.w 0
  246.         dc.w 0
  247.         dc.w 0
  248.         dc.w 0
  249.         dc.w 0
  250.         dc.w 0
  251.         dc.w 0 
  252. ;      
  253. ;       ; $50+ FMV
  254. ;       dc.w 0
  255. ;       dc.w 0
  256. ;       dc.w 0
  257. ;       dc.w 0
  258. ;       dc.w 0
  259. ;       dc.w 0
  260. ;       dc.w 0
  261. ;       dc.w 0
  262. ;       dc.w 0
  263. ;       dc.w 0
  264. ;       dc.w 0
  265. ;       dc.w 0
  266. ;       dc.w 0
  267. ;       dc.w 0
  268. ;       dc.w 0
  269. ;       dc.w 0 
  270. ;
  271. ;       ; $60+
  272. ;       dc.w 0
  273. ;       dc.w 0
  274. ;       dc.w 0
  275. ;       dc.w 0
  276. ;       dc.w 0
  277. ;       dc.w 0
  278. ;       dc.w 0
  279. ;       dc.w 0
  280. ;       dc.w 0
  281. ;       dc.w 0
  282. ;       dc.w 0
  283. ;       dc.w 0
  284. ;       dc.w 0
  285. ;       dc.w 0
  286. ;       dc.w 0
  287. ;       dc.w 0 
  288. ;
  289. ;       ; $70+
  290. ;       dc.w 0
  291. ;       dc.w 0
  292. ;       dc.w 0
  293. ;       dc.w 0
  294. ;       dc.w 0
  295. ;       dc.w 0
  296. ;       dc.w 0
  297. ;       dc.w 0
  298. ;       dc.w 0
  299. ;       dc.w 0
  300. ;       dc.w 0
  301. ;       dc.w 0
  302. ;       dc.w 0
  303. ;       dc.w 0
  304. ;       dc.w 0
  305. ;       dc.w 0
  306.    
  307.         even       
  308.  
  309. ; =====================================================================
  310. ; -------------------------------------------
  311. ; $04 - Load Hadagi file to WordRAM
  312. ;
  313. ; CommDataM:
  314. ; $00-$07 - Filename
  315. ;
  316. ; CommDataS:
  317. ; $00 - -1 if failed
  318. ; -------------------------------------------
  319.  
  320. Cmd_04:
  321.         movea.l a6,a0           ; Name pointer
  322.         bsr FindFile        ; Find File returns params in the right format for ReadCD
  323.         move.l  #$80000,a0      ; Set destionation to WordRAM
  324.         move.w  #$800,d2
  325.         bra ReadSector
  326.    
  327. ; -------------------------------------------
  328. ; $05 - Load PRG-RAM from *Hadagi*
  329. ;
  330. ; CommDataM:
  331. ; $00-$0B - Filename ($C must be $00)
  332. ; $0D     - What to do
  333. ; > $00 - Load full file to buffer
  334. ; > $01 - PRG-RAM to WordRAM for MAIN
  335. ; > $02 - Load WordRAM
  336. ;
  337. ; CommDataS:
  338. ; $00 - -1 if something failed
  339. ; -------------------------------------------
  340.  
  341. Cmd_05:
  342.         tst.b   $D(a6)
  343.         bne.s   @Tasks
  344.         movea.l a6,a0
  345.         bsr FindFile
  346.         bmi @Failed
  347.         lea (StoredData),a0
  348.         move.w  #$800,d2
  349.         bra ReadSector
  350. @Tasks:
  351.         lea (StoredData),a3
  352.         cmp.l   #"RAM ",(a3)
  353.         bne @Failed
  354.        
  355.         cmp.b   #1,$D(a6)       ;Step 1?
  356.         bne.s   @Not_1
  357.         move.l  8(a3),d3
  358.         move.l  $C(a3),d4
  359.         adda    d3,a3
  360.         lea ($80000),a4
  361. @1_WordRam:
  362.         move.b  (a3)+,(a4)+
  363.         add.l   #1,d3
  364.         cmp.l   d4,d3
  365.         blt.s   @1_WordRam
  366.        
  367. @Not_1:
  368.  
  369. ; -------------------------------------------
  370.  
  371.         cmp.b   #2,$D(a6)       ;Step 2?
  372.         bne.s   @Not_3
  373.         move.l  $10(a3),d3
  374.         move.l  $14(a3),d4
  375.         adda    d3,a3
  376.         lea ($80000),a4
  377. @2_WordRam:
  378.         move.b  (a3)+,(a4)+
  379.         add.l   #1,d3
  380.         cmp.l   d4,d3
  381.         blt.s   @2_WordRam
  382. @Not_3:
  383.         rts
  384.  
  385. @Failed:
  386.         move.b  #-1,(a5)
  387.         rts
  388.  
  389. ; -------------------------------------------
  390. ; $08 - Return WordRAM to Main
  391. ; -------------------------------------------
  392.  
  393. Cmd_08:
  394.         bset    #0,(ThisCpu+MemoryMode+1)       ; Give WordRAM to Main CPU
  395.         rts
  396.  
  397. ; -------------------------------------------
  398. ; $10 - Play CD Track, Repeat
  399. ;
  400. ; CommDataM:
  401. ; $00-$02 - Track
  402. ; -------------------------------------------
  403.  
  404. Cmd_10:
  405.         movea.l a6,a0
  406.         BIOS_MSCPLAYR
  407.         rts
  408.  
  409. ; -------------------------------------------
  410. ; $14 - Stop CD Track
  411. ;
  412. ; CommDataM:
  413. ; $00-$02 - Track
  414. ; -------------------------------------------
  415.  
  416. Cmd_14:
  417.         BIOS_MSCSTOP
  418.         rts
  419.        
  420. ; -------------------------------------------
  421. ; $20 - PCM, load sample file from CD, .wav
  422. ;       format, auto-converted
  423. ;
  424. ; CommDataM:
  425. ; $00-$0B - Filename ($C must be $00)
  426. ; $0D     - Wave bank to use (input: $01-$0F)
  427. ;
  428. ; CommDataS:
  429. ; $00     - Next free bank to use
  430. ; $02     - Sample length
  431. ; -------------------------------------------
  432.  
  433. Cmd_20:
  434.         lea (PCM),a4
  435.         move.b  #$FF,OnOff(a4)
  436.         bsr PCM_Wait
  437.  
  438.         lea (StoredData),a0
  439.         move.w  #$FFFF,d3
  440. @cln_copy:
  441.         move.l  #-1,(a0)+
  442.         dbf d3,@cln_copy
  443.  
  444.         movea.l a6,a0
  445.         bsr FindFile
  446.         lea (StoredData),a0
  447.         move.w  #$800,d2
  448.         bsr ReadSector
  449.        
  450. ; ----------------------------------
  451.  
  452.         lea (StoredData),a0
  453.         adda    #$28,a0
  454.         moveq   #0,d2
  455.         move.b  1(a0),d2
  456.         lsl.w   #8,d2
  457.         move.b  (a0),d2
  458.         sub.w   #1,d2
  459.         and.l   #$FFFF,d2
  460.         move.l  d2,d5
  461.         move.w  d5,2(a5)
  462.         adda    #4,a0
  463. ;       lea (PcmToCopy),a1
  464. @Convert:
  465.         move.b  (a0),d4
  466.         bsr @ConvertWav
  467.         move.b  d4,(a0)+
  468.         dbf d5,@Convert
  469.        
  470. ; ----------------------------------
  471.  
  472.         lea (StoredData),a0
  473.         adda    #$2C,a0
  474.         move.l  #$FF2001,d0
  475.         move.b  $D(a6),d1
  476.         and.b   #$F,d1
  477.         bset    #7,d1
  478.         move.b  d1,Ctrl(a4)
  479.         bsr PCM_Wait
  480. @SendData:
  481.         cmp.l   #$FF4001,d0
  482.         blt.s   @Lower
  483.         move.l  #$FF2001,d0
  484.         add.b   #1,d1
  485.         cmp.b   #$8F,d1
  486.         blt.s   @Lower
  487.         cmp.w   #$FFF,d5
  488.         blt.s   @Lower
  489.         move.w  #$FFF,d5
  490. @Lower:
  491.         move.b  d1,Ctrl(a4)
  492.         bsr PCM_Wait
  493.         movea.l d0,a1
  494.         move.b  (a0)+,(a1)
  495.         add.l   #2,d0
  496.         dbf d2,@SendData
  497.  
  498.         add.b   #1,d1
  499.         cmp.b   #$8F,d1
  500.         blt.s   @NotLast
  501.         move.b  #$8F,d1
  502. @NotLast:
  503.         move.b  d1,(a5)
  504.    
  505. @Failed_PCM:
  506.         rts
  507.  
  508. ; -------------------------------------------
  509. ; Convert WAV data to PCM format
  510. ;
  511. ; d4 - wav input/pcm output (BYTE)
  512. ; -------------------------------------------
  513.  
  514. @ConvertWav:
  515.         tst.b   d4
  516.         bpl.s   @Plus
  517.         and.w   #$7F,d4
  518.         rts
  519. @Plus:
  520.         move.w  #$80,d3
  521.         sub.b   d4,d3
  522.         move.b  #$80,d4
  523.         add.b   d3,d4
  524. @Cont:
  525.         cmp.b   #$FF,d4
  526.         bne.s   @NoEnd
  527.         move.b  #$FE,d4
  528. @NoEnd:
  529.         rts
  530.  
  531. ; -------------------------------------------
  532. ; $21 - PCM, Sample address
  533. ;
  534. ; CommDataM:
  535. ; $00 - Channel ID ($00-$07)
  536. ; $01 - Channel data start ST ($00-$0F, auto leftshifted to $x000)
  537. ; $02 - Channel loop address ($xxyy)
  538. ; -------------------------------------------
  539.  
  540. Cmd_21:
  541.         lea (PCM),a4
  542.        
  543.         move    #0,d1
  544.         move.b  (a6),d1
  545.         and.w   #$F,d1
  546.         or.w    #$C0,d1
  547.         move.b  d1,Ctrl(a4)
  548.         bsr PCM_Wait
  549.  
  550.         move.b  1(a6),d2
  551.         lsl.w   #4,d2
  552.         move.b  d2,ST(a4)
  553.         bsr PCM_Wait
  554.  
  555.         move.w  2(a6),d0
  556.         move.b  d0,LSL(a4)      ;Loop address
  557.         bsr PCM_Wait
  558.         lsr.w   #8,d0
  559.         add.b   d2,d0
  560.         move.b  d0,LSH(a4)
  561.         bsr PCM_Wait
  562.        
  563.         move.b  d1,Ctrl(a4)
  564.         bra PCM_Wait
  565.  
  566. ; -------------------------------------------
  567. ; $22 - PCM, Set frequency
  568. ;
  569. ; CommDataM:
  570. ; $00 - Channel ID ($00-$07)
  571. ; $02 - Frequency value
  572. ; -------------------------------------------
  573.  
  574. Cmd_22:
  575.         lea (PCM),a4
  576.        
  577.         move.b  (a6),d1
  578.         and.b   #$F,d1
  579.         add.b   #$C0,d1
  580.         move.b  d1,Ctrl(a4)
  581.         bsr PCM_Wait
  582.        
  583.         move.b  2(a6),FDH(a4)
  584.         bsr PCM_Wait
  585.         move.b  3(a6),FDL(a4)
  586.         bsr PCM_Wait
  587.        
  588.         move.b  d1,Ctrl(a4)
  589.         bra PCM_Wait
  590.  
  591. ; -------------------------------------------
  592. ; $23 - PCM, Panning
  593. ;
  594. ; CommDataM:
  595. ; $00 - Channel ID ($00-$07)
  596. ; $01 - Panning data
  597. ; -------------------------------------------
  598.  
  599. Cmd_23:
  600.         lea (PCM),a4
  601.         move.b  (a6),d1
  602.         and.w   #$F,d1
  603.         or.b    #$C0,d1
  604.         move.b  d1,Ctrl(a4)
  605.         bsr PCM_Wait
  606.        
  607.         move.b  1(a6),d2
  608.         move.b  d2,PAN(a4)      ;Panning
  609.         bsr PCM_Wait
  610.        
  611.         move.b  d1,Ctrl(a4)
  612.         bra PCM_Wait
  613.  
  614. ; -------------------------------------------
  615. ; $24 - PCM, Envelope
  616. ;
  617. ; CommDataM:
  618. ; $00 - Channel ID ($00-$07)
  619. ; $01 - Envelope
  620. ; -------------------------------------------
  621.  
  622. Cmd_24:
  623.         lea (PCM),a4
  624.         move.b  (a6),d1
  625.         and.b   #$F,d1
  626.         or.b    #$C0,d1
  627.         move.b  d1,Ctrl(a4)
  628.         bsr PCM_Wait
  629.  
  630.         move.b  1(a6),ENV(a4)
  631.         bsr PCM_Wait
  632.        
  633.         move.b  d1,Ctrl(a4)
  634.         bra PCM_Wait
  635.        
  636. ; -------------------------------------------
  637. ; $25 - PCM. On/Off
  638. ;
  639. ; CommDataM:
  640. ; $00 - Channel On/Off (swapped bits: 0 - Off, 1 - On)
  641. ; -------------------------------------------
  642.  
  643. Cmd_25:
  644.         move.b  (a6),d0
  645.         not.b   d0
  646.         move.b  d0,(PCM+OnOff)
  647.         bra PCM_Wait
  648.  
  649. ; -------------------------------------------
  650. ; $26 - FULLY Clear the PCM chip
  651. ; -------------------------------------------
  652.  
  653. Cmd_26:
  654.         move.b  #$FF,(PCM+OnOff)
  655.         bsr PCM_Wait
  656.         move.b  #$FF,(PCM+PAN)
  657.         bsr PCM_Wait
  658.        
  659.         lea (PCM),a0
  660.         move.b  #$80,d3
  661.         moveq   #$F,d5
  662. @Next:
  663.         move.b  d3,Ctrl(a0)
  664.         bsr PCM_Wait
  665.         lea ($FF2001),a2
  666.         move.w  #$FFF,d0
  667. @loop1:
  668.         move.b  #$FF,(a2)
  669.         addq.l  #2,a2
  670.         dbf d0,@loop1
  671.         move.b  d3,Ctrl(a0)
  672.         bsr PCM_Wait
  673.         add.b   #1,d3
  674.         dbf d5,@Next
  675.         rts
  676.        
  677. ; -------------------------------------------
  678. ; $30 - Rotation init
  679. ; -------------------------------------------
  680.  
  681. Cmd_30:
  682.         lea @fs_stampart(pc),a0
  683.         bsr FindFile
  684.         lea ($80000),a0
  685.         move.w  #$800,d2
  686.         bsr ReadSector
  687.        
  688.         lea (Map_StampsTest),a0
  689.         lea ($80000+$3FE00),a1
  690.         moveq   #0,d0
  691.         move.w  (a0)+,d0
  692. @StampMap:
  693.         move.w  (a0)+,d1
  694.         and #$1FFF,d1
  695.         move.w  d1,(a1)+
  696.         dbf d0,@StampMap
  697.        
  698.         move.w  #%000,($FF8058).l       ; Stamp data size: 16x16 dot | 1x1 screen | RPT
  699.         move.w  #(($3FE00)>>2),($FF805A).l  ; Stamp map base address
  700.         move.w  #(($38E00)>>2),($FF805E).l  ; Image buffer start address
  701.         move.w  #0,($FF8060).l          ; Image buffer offset
  702.         move.w  #(((224)>>3)-1),($FF805C).l ; Image buffer V cell size
  703.        
  704.         lea (Stamp_New),a5
  705.         move.w  #$80, word_0(a5)
  706.         move.w  #0,   word_2(a5)
  707.         move.w  #0,   word_4(a5)
  708.         move.w  #0,   word_6(a5)
  709.         move.w  #0,   word_8(a5)
  710.         move.w  #0,   word_A(a5)
  711.    
  712.    
  713.         lea (StampBuffer),a0
  714.         move.w  #(numof_stamps)-1,d0
  715. @next_stamp:
  716.         clr.w   stamp_x(a0)
  717.         clr.w   stamp_y(a0)
  718.         move.w  #(256*8),stamp_xd(a0)
  719.         move.w  #(256*8),stamp_yd(a0)
  720.        
  721.         adda    #sizeof_stamp,a0
  722.         dbf d0,@next_stamp 
  723.         rts
  724.  
  725. @fs_stampart:   dc.b "STAMPART.BIN",0
  726.         even
  727.        
  728. ; -------------------------------------------
  729. ; $31 - Modify stamp: XY move / scale
  730. ;
  731. ; CommDataM:
  732. ; $00 - Stamp ID
  733. ; $02 - X Start
  734. ; $04 - Y Start
  735. ; $06 - X scale
  736. ; $08 - Y scale
  737. ; -------------------------------------------
  738.  
  739. Cmd_31:
  740.         lea (StampBuffer),a0
  741.         move.w  (a6),d0
  742.         mulu.w  #sizeof_stamp,d0
  743.         adda    d0,a0
  744.        
  745.         move.w  2(a6),d0
  746.         lsl.w   #3,d0
  747.         neg.w   d0
  748.         move.w  d0,stamp_x(a0)
  749.         move.w  4(a6),d0
  750.         lsl.w   #3,d0
  751.         neg.w   d0
  752.         move.w  d0,stamp_y(a0)
  753.        
  754.         move.w  6(a6),d0
  755.         lsl.w   #4,d0
  756.         add.w   #256*8,d0
  757.         swap    d0
  758.         move.w  8(a6),d0
  759.         lsl.w   #4,d0
  760.         add.w   #256*8,d0
  761.         move.w  d0,stamp_yd(a0)
  762.         swap    d0
  763.         move.w  d0,stamp_xd(a0)
  764.         rts
  765.        
  766. ; -------------------------------------------
  767. ; $34 - Modify stamp: Rotate
  768. ;
  769. ; CommDataM:
  770. ; $00 - Stamp ID
  771. ; $02 - X Start
  772. ; $04 - Y Start
  773. ; $06 - X scale
  774. ; $08 - Y scale
  775. ; $0A - Rotate
  776. ; -------------------------------------------
  777.  
  778. Cmd_34:
  779.         lea (Stamp_New),a5
  780.         move.w  2(a6),d0
  781.         neg.w   d0
  782.         move.w  d0,word_2(a5)
  783.         move.w  4(a6),d0
  784.         neg.w   d0
  785.         move.w  d0,word_4(a5)
  786.        
  787.        
  788.         move.w  6(a6),d0
  789.         lsl.w   #1,d0
  790.         move.w  d0,word_6(a5)
  791.         move.w  8(a6),d0
  792.         lsl.w   #1,d0
  793.         move.w  d0,word_8(a5)
  794.         move.w  $A(a6),d0
  795.         lsl.w   #1,d0
  796.         move.w  d0,word_A(a5)
  797.         rts
  798.        
  799. ;       lea (StampBuffer),a0
  800. ;       move.w  (a6),d0
  801. ;       mulu.w  #sizeof_stamp,d0
  802. ;       adda    d0,a0
  803. ;      
  804. ;       move.w  2(a6),d0
  805. ;       lsl.w   #3,d0
  806. ;       neg.w   d0
  807. ;       move.w  d0,stamp_x(a0)
  808. ;       move.w  4(a6),d0
  809. ;       lsl.w   #3,d0
  810. ;       neg.w   d0
  811. ;       move.w  d0,stamp_y(a0)
  812. ;      
  813. ;       move.w  6(a6),d0
  814. ;       lsl.w   #4,d0
  815. ;       add.w   #256*8,d0
  816. ;       swap    d0
  817. ;       move.w  8(a6),d0
  818. ;       lsl.w   #4,d0
  819. ;       add.w   #256*8,d0
  820. ;       move.w  d0,stamp_yd(a0)
  821. ;       swap    d0
  822. ;       move.w  d0,stamp_xd(a0)
  823. ;      
  824. ;       move.w  $A(a6),d0
  825. ;       move.w  d0,stamp_rot(a0)   
  826. ;       rts
  827.        
  828. ; -------------------------------------------
  829. ; $38 - Rotation run
  830. ; -------------------------------------------
  831.  
  832. Cmd_38:
  833.         move.w  #256,($FF8062).l        ; Image buffer H dot size
  834.         move.w  #224,($FF8064).l        ; Image buffer V dot size
  835.         move.w  #(($38700)>>2),($FF8066).l  ; Image trace vector base address
  836.         bclr    #3,($FF8003).l          ;
  837.         bclr    #4,($FF8003).l          ; Stamp: Write mode (00: Normal 01: Underwrite 10: Overwrite)
  838.        
  839.         lea (Stamp_New),a5
  840.         lea ($80000+$38700),a1
  841.         bsr @ScrewStamp
  842.        
  843.         lea (Stamp_New),a5
  844. ;       add.w   #8,word_A(a5)
  845. ;           move.w  #-96,word_2(a5)
  846. ;           move.w  #-96,word_4(a5)
  847. ;       add.w   #8,word_8(a5)      
  848. ;       add.w   #1,word_4(a5)      
  849.         rts
  850. ;      
  851. @ScrewStamp:
  852. ;       move.w  word_1CA0(a6),d0
  853. ;       lsl.w   #2,d0
  854. ;       movem.w word_7D02(pc, d0.w), d2/d6
  855.  
  856.         move.w  #$FF68,d1
  857.         move.w  #$FFB0,d2
  858.        
  859.         bsr.w   sub_7E94
  860.         bsr.w   sub_7D22
  861.  
  862.         move.w  #224-1,d6
  863. @loc_7CF2:
  864.         bsr.w   calculateGfxDivisor
  865.         bsr.w   generateTraceVector
  866.         addq.w  #1,d2
  867.         dbf d6,@loc_7CF2
  868.  
  869.         rts
  870.        
  871. ; -------------------------------------------
  872.  
  873. ; =============== S U B R O U T I N E =======================================
  874.  
  875.  
  876. sub_7D22:               ; CODE XREF: sub_7CD0+1Ep
  877.     move.w word_0(a5), d0
  878.     add.w  word_6(a5), d0
  879.     muls.w word_22(a5), d0
  880.  
  881.     move.w word_4(a5), d3
  882.     muls.w word_20(a5), d3
  883.  
  884.     add.l  d3, d0
  885.     asr.l  #8, d0
  886.     move.w d0, word_30(a5)
  887.  
  888.     move.w word_2(a5), d0
  889.     muls.w word_20(a5), d0
  890.     asr.l  #8, d0
  891.     move.w d0, word_32(a5)
  892.  
  893.     move.w word_2(a5), d0
  894.     muls.w word_22(a5), d0
  895.     asr.l  #8, d0
  896.     move.w d0, word_34(a5)
  897.  
  898.     move.w word_0(a5), d0
  899.     muls.w word_22(a5), d0
  900.     asr.l  #8, d0
  901.     move.w d0, word_36(a5)
  902.  
  903.     move.w word_30(a5), d0
  904.     muls.w word_26(a5), d0
  905.     asr.l  #8, d0
  906.     move.w d0, word_38(a5)
  907.  
  908.     move.w word_30(a5), d0
  909.     muls.w word_24(a5), d0
  910.     asr.l  #8, d0
  911.     move.w d0, word_3C(a5)
  912.  
  913.     move.w word_0(a5), d0
  914.     add.w  word_6(a5), d0
  915.     muls.w word_24(a5), d0
  916.     move.w word_32(a5), d3
  917.     muls.w word_26(a5), d3
  918.     sub.l  d3, d0
  919.     asr.l  #8, d0
  920.     move.w d0, word_40(a5)
  921.  
  922.     move.w word_0(a5), d0
  923.     add.w  word_6(a5), d0
  924.     muls.w word_26(a5), d0
  925.     move.w word_32(a5), d3
  926.     muls.w word_24(a5), d3
  927.     add.l  d3, d0
  928.     asr.l  #8, d0
  929.     move.w d0, word_44(a5)
  930.  
  931.     move.w word_34(a5), d0
  932.     muls.w word_26(a5), d0
  933.     move.w word_4(a5), d3
  934.     muls.w word_24(a5), d3
  935.     add.l  d3, d0
  936.     asr.l  #8, d0
  937.     muls.w word_0(a5), d0
  938.     move.l d0, long_48(a5)
  939.  
  940.     move.w word_34(a5), d0
  941.     muls.w word_24(a5), d0
  942.     move.w word_4(a5), d3
  943.     muls.w word_26(a5), d3
  944.     sub.l  d3, d0
  945.     asr.l  #8, d0
  946.     muls.w word_0(a5), d0
  947.     move.l d0, long_4C(a5)
  948.  
  949.     move.w word_38(a5), d0
  950.     muls.w d1, d0
  951.     move.l d0, long_50(a5)
  952.  
  953.     move.w word_3C(a5), d0
  954.     muls.w d1, d0
  955.     move.l d0, long_54(a5)
  956.  
  957.     move.w word_38(a5), d0
  958.     ext.l  d0
  959.     asl.l  #8, d0
  960.     move.l d0, long_5C(a5)
  961.  
  962.     move.w word_3C(a5), d0
  963.     neg.w  d0
  964.     ext.l  d0
  965.     asl.l  #8, d0
  966.     move.l d0, long_60(a5)
  967.  
  968.     rts
  969. ; End of function sub_7D22
  970.  
  971.  
  972. ; =============== S U B R O U T I N E =======================================
  973.  
  974.  
  975. calculateGfxDivisor:               ; CODE XREF: sub_7CD0:loc_7CF2p
  976.     move.w word_20(a5), d0
  977.     muls.w d2, d0
  978.     asr.l  #8, d0
  979.  
  980.     move.w word_36(a5), d3
  981.     sub.w  d0, d3
  982.     bne.s  @loc_7E36
  983.  
  984.     ; Prevent possible divide-by-zero
  985.     moveq #1, d3
  986.  
  987. @loc_7E36:
  988.     move.w d3, long_5C_div(a5)
  989.     rts
  990. ; End of function calculateGfxDivisor
  991.  
  992.  
  993. ; =============== S U B R O U T I N E =======================================
  994.  
  995.  
  996. ; Inputs:
  997. ;   a1: Address to put trace vector
  998.  
  999. generateTraceVector:               ; CODE XREF: sub_7CD0+26p
  1000.     move.w word_40(a5), d0
  1001.     muls.w d2, d0
  1002.  
  1003.     add.l  long_50(a5), d0
  1004.     add.l  long_48(a5), d0
  1005.  
  1006.     divs.w long_5C_div(a5), d0
  1007.  
  1008.     asl.w  #3, d0
  1009.     addi.w #(152<<3), d0
  1010.  
  1011.     ; Write X start position
  1012.     move.w d0, (a1)+
  1013.  
  1014.     move.w word_44(a5), d0
  1015.     muls.w d2, d0
  1016.  
  1017.     sub.l  long_54(a5), d0
  1018.     sub.l  long_4C(a5), d0
  1019.  
  1020.     divs.w long_5C_div(a5), d0
  1021.  
  1022.     asl.w  #3, d0
  1023.     addi.w #(80<<3), d0
  1024.  
  1025. ;   tst.w  word_1CA4(a6)            ;TODO: object ID
  1026. ;   beq.s  @loc_7E78
  1027. ;
  1028. ;   addi.w #($F60<<3), d0
  1029. ;
  1030. @loc_7E78:
  1031.     ; Write Y start position
  1032.     move.w d0, (a1)+
  1033.  
  1034.     move.l long_5C(a5), d0
  1035.     divs.w long_5C_div(a5), d0
  1036.     asl.w  #3, d0
  1037.  
  1038.     ; Write X delta
  1039.     move.w d0, (a1)+
  1040.  
  1041.     move.l long_60(a5), d0
  1042.     divs.w long_5C_div(a5), d0
  1043.     asl.w  #3, d0
  1044.  
  1045.     ; Write Y delta
  1046.     move.w d0, (a1)+
  1047.  
  1048.     rts
  1049. ; End of function generateTraceVector
  1050.  
  1051.  
  1052. ; =============== S U B R O U T I N E =======================================
  1053.  
  1054.  
  1055. sub_7E94:               ; CODE XREF: sub_7CD0+1Ap
  1056.     andi.w #$1FF, word_8(a5)
  1057.  
  1058.     move.w word_8(a5), d7
  1059.  
  1060.     move.w d7, d0
  1061.     andi.w #$80, d0
  1062.     cmpi.w #$80, d0
  1063.     bne.s  @loc_7EAC
  1064.  
  1065.     addq.w #1, d7
  1066.  
  1067. @loc_7EAC:
  1068.     move.w d7, d5
  1069.     bsr.s  sub_7EEA
  1070.  
  1071.     move.w d7, word_20(a5)
  1072.     move.w d5, d7
  1073.     bsr.s  sub_7EE6
  1074.  
  1075.     move.w d7, word_22(a5)
  1076.  
  1077.     andi.w #$1FF, word_A(a5)
  1078.     move.w word_A(a5), d7
  1079.     move.w d7, d0
  1080.     andi.w #$80, d0
  1081.     cmpi.w #$80, d0
  1082.     bne.s  @loc_7ED4
  1083.  
  1084.     addq.w #1, d7
  1085.  
  1086. @loc_7ED4:
  1087.     move.w d7, d5
  1088.     bsr.s  sub_7EEA
  1089.  
  1090.     move.w d7, word_24(a5)
  1091.     move.w d5, d7
  1092.     bsr.s  sub_7EE6
  1093.  
  1094.     move.w d7, word_26(a5)
  1095.     rts
  1096.    
  1097. ; -------------------------------------------
  1098.  
  1099. sub_7EE6:               ; CODE XREF: sub_7E94+22p sub_7E94+4Ap
  1100.     addi.w  #$80, d7
  1101.  
  1102. sub_7EEA:               ; CODE XREF: sub_7E94+1Ap sub_7E94+42p
  1103.     move.l  d6, -(sp)
  1104.  
  1105.     andi.w  #$1FF, d7
  1106.     move.w  d7, d6
  1107.  
  1108.     btst    #7, d7
  1109.     beq.s   @loc_7EFA
  1110.  
  1111.     not.w   d6
  1112.  
  1113. @loc_7EFA:
  1114.     andi.w  #$7F, d6
  1115.     lsl.w   #1, d6
  1116.     move.w  word_7F12(pc, d6.w), d6
  1117.  
  1118.     btst    #8, d7
  1119.     beq.s   @loc_7F0C
  1120.  
  1121.     neg.w   d6
  1122.  
  1123. @loc_7F0C:
  1124.     move.w  d6, d7
  1125.  
  1126.     move.l  (sp)+, d6
  1127.     rts
  1128.    
  1129. ; -------------------------------------------
  1130.  
  1131. word_7F12:
  1132.     incbin "cd/word_7F12.bin"
  1133.    
  1134. ;       lea (StampBuffer),a0
  1135. ;       lea     ($80000+$38700).l,a1
  1136. ;       moveq   #0,d4
  1137. ;       moveq   #0,d5
  1138. ;       moveq   #0,d6
  1139. ;       move.w  stamp_x(a0),d4
  1140. ;       move.w  stamp_y(a0),d5          ; Ystart
  1141. ;       swap    d5
  1142. ;       move.w  stamp_yd(a0),d6
  1143. ;       lsl.l   #8,d6
  1144. ;       move.w  stamp_rot(a0),d3
  1145. ;       lsl.l   #3,d3
  1146. ;       move.w  #(224)-1,d7
  1147. ;       move.w  stamp_xd(a0),d2
  1148. ;       swap    d2
  1149. ; @TraceLoop:
  1150. ;       swap    d5
  1151. ;       swap    d2
  1152. ;      
  1153. ;       move.w  d4,d0
  1154. ; ;         sub.w   d3,d0
  1155. ;       move.w  d0,(a1)+            ; X pos
  1156. ;
  1157. ;
  1158. ;       move.w  d5,d0
  1159. ;           sub.w   d3,d0
  1160. ;       move.w  d0,(a1)+            ; Y pos
  1161. ;
  1162. ;      
  1163. ;       move.w  stamp_xd(a0),(a1)+      ; X texture
  1164. ;      
  1165. ;       move.w  d3,d0
  1166. ;       add.w   d0,d0
  1167. ;       move.w  d0,(a1)+            ; Y texture
  1168. ;      
  1169. ;       swap    d5
  1170. ;       add.l   d6,d5
  1171. ;       dbf     d7,@TraceLoop
  1172.         rts
  1173.    
  1174. ; -------------------------------------------
  1175. ; $40 - BRAM Init
  1176. ; -------------------------------------------
  1177.  
  1178. Cmd_40:
  1179.         lea (BRAM_Buffer),a0
  1180.         lea (BRAM_Strings),a1
  1181.         BIOS_BRMINIT
  1182.  
  1183.         lea @SaveName(pc),a0
  1184.         BIOS_BRMSERCH
  1185.         bcc.s   @DontInitAgain
  1186.        
  1187.         lea @SaveName(pc),a0
  1188.         lea (Save_Data),a1
  1189.         BIOS_BRMWRITE
  1190.        
  1191. @DontInitAgain:
  1192.         rts
  1193.            
  1194. @SaveName:  dc.b "_SAVE_NAME_",0
  1195.         dc.w $0001
  1196.         even
  1197.        
  1198. ; =====================================================================
  1199. ; -------------------------------------------
  1200. ; Level 2 IRQ
  1201. ; -------------------------------------------
  1202.  
  1203. SP_IRQ:
  1204.         clr.b   (VBlankFlag)
  1205.         rts
  1206.  
  1207. ; =====================================================================
  1208. ; Subs
  1209. ; =====================================================================
  1210.  
  1211. ; -------------------------------------------
  1212. ; PCM_Wait
  1213. ; -------------------------------------------
  1214.  
  1215. PCM_Wait:
  1216.         movem.l d0,-(sp)
  1217.         move.w  #6,d0
  1218. @WaitLoop:
  1219.         dbf d0,@WaitLoop
  1220.         movem.l (sp)+,d0
  1221.         rts  
  1222.        
  1223. ; -------------------------------------------
  1224. ; ReadSector
  1225. ;
  1226. ; Input:
  1227. ; a0 - Destination
  1228. ; d0 - Sector start
  1229. ; d1 - Number of sectors
  1230. ; d2 - Destination increment ($0 or $800)
  1231. ; -------------------------------------------
  1232.  
  1233. ReadSector:
  1234.         movem.l d3-d6,-(sp)
  1235.         and.w   #$FFFF,d0
  1236.         and.w   #$FFFF,d1
  1237.         move.l  d0,(BiosArgs)
  1238.         move.l  d1,(BiosArgs+4)
  1239.         movea.l a0,a2
  1240.         BIOS_CDCSTOP            ; Stop disc
  1241.         lea (BiosArgs),a0
  1242.         BIOS_ROMREADN           ; Start from this sector
  1243. @waitSTAT:
  1244.         BIOS_CDCSTAT            ; Ready?
  1245.         bcs @waitSTAT
  1246. @waitREAD:
  1247.         BIOS_CDCREAD            ; Read data
  1248.         bcc @waitREAD       ; If not done, branch
  1249. @WaitTransfer:
  1250.         movea.l a2,a0           ; Set destination address
  1251.         lea (BiosArgs+$10),a1   ; Set head buffer
  1252.         BIOS_CDCTRN         ; Transfer sector
  1253.         bcc @waitTransfer       ; If not done, branch
  1254.         BIOS_CDCACK         ; Acknowledge transfer
  1255.  
  1256.         adda    d2,a2
  1257.  
  1258.         add.l   #1,(BiosArgs)
  1259.         sub.l   #1,(BiosArgs+4)
  1260.         bne.s   @waitSTAT
  1261.         movem.l (sp)+,d3-d6
  1262.         rts
  1263.  
  1264. ; -------------------------------------------
  1265. ;  ISO9660 Driver
  1266. ; -------------------------------------------
  1267.  
  1268. Init9660:
  1269.         movem.l d0-d7/a0-a6,-(a7)
  1270.                         ; Load Volume VolumeDescriptor
  1271.  
  1272.         moveq   #$10,d0         ; Start Sector
  1273.         moveq   #$20,d1         ; Size in sector
  1274.         lea (ISO_Files),a0      ; Destination
  1275.         move.w  #$800,d2
  1276.         bsr ReadSector      ; Read Data
  1277.  
  1278.                         ; Load Root Directory
  1279.         lea (ISO_Files),a0      ; Get pointer to sector buffer
  1280.         lea.l   $9C(a0),a1      ; Get root directory record
  1281.        
  1282.         move.b  6(a1),d0        ; Get first part of Sector address
  1283.         lsl.l   #8,d0           ; bitshift
  1284.         move.b  7(a1),d0        ; Get next part of sector address
  1285.         lsl.l   #8,d0           ; bitshift
  1286.         move.b  8(a1),d0        ; get next part of sector address
  1287.         lsl.l   #8,d0           ; bitshift
  1288.         move.b  9(a1),d0        ; get final part of sector address.
  1289.                         ; d0 now contains start sector address
  1290.         move.l  #$20, d1        ; Size ($20 Sectors)
  1291.         move.w  #$800,d2
  1292.         bsr ReadSector
  1293.        
  1294.         movem.l (a7)+,d0-d7/a0-a6   ; Restore all registers    
  1295.         rts
  1296.        
  1297. ; -------------------------------------------
  1298. ;  Find File (ISO9660)
  1299. ;  Input:  a0.l - Pointer to filename
  1300. ;  Output: d0.l - Start sector
  1301. ;        d1.l - Number of sectors
  1302. ;          d2.l - Filesize
  1303. ; -------------------------------------------
  1304.  
  1305. FindFile:
  1306.         movem.l a1/a2/a6,-(a7)
  1307.  
  1308.         lea (ISO_Files),a1      ; Get sector buffer
  1309. @ReadFilenameStart:
  1310.         movea.l a0,a6           ; Store filename pointer
  1311.         move.b  (a6)+,d0        ; Read character from filename
  1312. @findFirstChar:
  1313.         movea.l a1,a2           ; Store Sector buffer pointer
  1314.         cmp.b   (a1)+,d0        ; Compare with first letter of filename and increment
  1315.         bne.b   @findFirstChar      ; If not matched, branch
  1316. @checkChars:
  1317.         move.b  (a6)+,d0        ; Read next charactor of filename and increment
  1318.         beq.s   @getInfo        ; If all characters were matched, branch           
  1319.         cmp.b   (a1)+,d0        ; Else, check next character
  1320.         bne.b   @ReadFilenameStart  ; If not matched, find next file
  1321.         bra.s   @checkChars     ; else, check next character
  1322.    
  1323. @getInfo:
  1324.         sub.l   #$21,a2         ; Move to beginning of directory entry
  1325.         move.b  6(a2),d0        ; Get first part of Sector address
  1326.         lsl.l   #8,d0           ; bitshift
  1327.         move.b  7(a2),d0        ; Get next part of sector address
  1328.         lsl.l   #8,d0           ; bitshift
  1329.         move.b  8(a2),d0        ; get next part of sector address
  1330.         lsl.l   #8,d0           ; bitshift
  1331.         move.b  9(a2),d0        ; get final part of sector address.
  1332.                         ; d0 now contains start sector address
  1333.  
  1334.         move.b  $E(a2),d1       ; Same as above, but for FileSize
  1335.         lsl.l   #8,d1
  1336.         move.b  $F(a2),d1
  1337.         lsl.l   #8,d1
  1338.         move.b  $10(a2),d1
  1339.         lsl.l   #8,d1
  1340.         move.b  $11(a2),d1
  1341.        
  1342.         move.l  d1,d2
  1343.         lsr.l   #8,d1           ; Bitshift filesize (to get sector count)
  1344.         lsr.l   #3,d1
  1345.    
  1346.         movem.l (a7)+,a1/a2/a6      ; Restore used registers   
  1347.         rts
  1348.        
  1349. ; -------------------------------------------
  1350. ; CalcSine
  1351. ;
  1352. ; Input:
  1353. ; d0 | WORD
  1354. ;
  1355. ; Output:
  1356. ; d0 | WORD
  1357. ; d1 | WORD
  1358. ; -------------------------------------------
  1359.  
  1360. CalcSine:
  1361.         and.w   #$FF,d0
  1362.         add.w   d0,d0
  1363.         add.w   #$80,d0
  1364.         move.w  Sine_Data(pc,d0.w),d1
  1365.         sub.w   #$80,d0
  1366.         move.w  Sine_Data(pc,d0.w),d0
  1367.         rts
  1368.  
  1369. Sine_Data:
  1370.         dc.w 0, 6, $C, $12, $19, $1F, $25, $2B, $31, $38, $3E
  1371.         dc.w $44, $4A, $50, $56, $5C, $61, $67, $6D, $73, $78
  1372.         dc.w $7E, $83, $88, $8E, $93, $98, $9D, $A2, $A7, $AB
  1373.         dc.w $B0, $B5, $B9, $BD, $C1, $C5, $C9, $CD, $D1, $D4
  1374.         dc.w $D8, $DB, $DE, $E1, $E4, $E7, $EA, $EC, $EE, $F1
  1375.         dc.w $F3, $F4, $F6, $F8, $F9, $FB, $FC, $FD, $FE, $FE
  1376.         dc.w $FF, $FF, $FF, $100, $FF, $FF, $FF, $FE, $FE, $FD
  1377.         dc.w $FC, $FB, $F9, $F8, $F6, $F4, $F3, $F1, $EE, $EC
  1378.         dc.w $EA, $E7, $E4, $E1, $DE, $DB, $D8, $D4, $D1, $CD
  1379.         dc.w $C9, $C5, $C1, $BD, $B9, $B5, $B0, $AB, $A7, $A2
  1380.         dc.w $9D, $98, $93, $8E, $88, $83, $7E, $78, $73, $6D
  1381.         dc.w $67, $61, $5C, $56, $50, $4A, $44, $3E, $38, $31
  1382.         dc.w $2B, $25, $1F, $19, $12, $C, 6, 0, -6, -$C, -$12
  1383.         dc.w -$19, -$1F, -$25, -$2B, -$31, -$38, -$3E, -$44, -$4A
  1384.         dc.w -$50, -$56, -$5C, -$61, -$67, -$6D, -$75, -$78, -$7E
  1385.         dc.w -$83, -$88, -$8E, -$93, -$98, -$9D, -$A2, -$A7, -$AB
  1386.         dc.w -$B0, -$B5, -$B9, -$BD, -$C1, -$C5, -$C9, -$CD, -$D1
  1387.         dc.w -$D4, -$D8, -$DB, -$DE, -$E1, -$E4, -$E7, -$EA, -$EC
  1388.         dc.w -$EE, -$F1, -$F3, -$F4, -$F6, -$F8, -$F9, -$FB, -$FC
  1389.         dc.w -$FD, -$FE, -$FE, -$FF, -$FF, -$FF, -$100, -$FF, -$FF
  1390.         dc.w -$FF, -$FE, -$FE, -$FD, -$FC, -$FB, -$F9, -$F8, -$F6
  1391.         dc.w -$F4, -$F3, -$F1, -$EE, -$EC, -$EA, -$E7, -$E4, -$E1
  1392.         dc.w -$DE, -$DB, -$D8, -$D4, -$D1, -$CD, -$C9, -$C5, -$C1
  1393.         dc.w -$BD, -$B9, -$B5, -$B0, -$AB, -$A7, -$A2, -$9D, -$98
  1394.         dc.w -$93, -$8E, -$88, -$83, -$7E, -$78, -$75, -$6D, -$67
  1395.         dc.w -$61, -$5C, -$56, -$50, -$4A, -$44, -$3E, -$38, -$31
  1396.         dc.w -$2B, -$25, -$1F, -$19, -$12, -$C, -6, 0, 6, $C, $12
  1397.         dc.w $19, $1F, $25, $2B, $31, $38, $3E, $44, $4A, $50
  1398.         dc.w $56, $5C, $61, $67, $6D, $73, $78, $7E, $83, $88
  1399.         dc.w $8E, $93, $98, $9D, $A2, $A7, $AB, $B0, $B5, $B9
  1400.         dc.w $BD, $C1, $C5, $C9, $CD, $D1, $D4, $D8, $DB, $DE
  1401.         dc.w $E1, $E4, $E7, $EA, $EC, $EE, $F1, $F3, $F4, $F6
  1402.         dc.w $F8, $F9, $FB, $FC, $FD, $FE, $FE, $FF, $FF, $FF
  1403.         even
  1404.        
  1405. ; =====================================================================
  1406.  
  1407. Map_StampsTest: dc.w ((@End-Map_StampsTest)/2)
  1408.         incbin  "engine/misc/stamptest/map.bin"
  1409. @End:
  1410.         even
  1411.        
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement