home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / sourcecode / german / iff-lader.s < prev    next >
Text File  |  1995-03-17  |  6KB  |  421 lines

  1. ;
  2. ; offsets Intuition
  3. ;
  4. OpenIntuition   = -30 -0
  5. Intuition       = -30 -6
  6. CloseScreen     = -30 -36
  7. OpenScreen      = -30 -168
  8. PrintIText      = -30 -186
  9. ;
  10. ; offsets exec
  11. ;
  12. OpenLib         = -30 -378
  13. OldOpenLibrary  = -30 -378
  14. CloseLibrary    = -30 -384
  15. AllocMem        = -30 -168
  16. FreeMem         = -30 -180
  17. ;
  18. ; offsets graphics (gfx)
  19. ;
  20. LoadRGB4        = -30 -162
  21. ;
  22. ;
  23. ; offsets dos
  24. ;
  25. Open            = -30
  26. Close           = -30 -6
  27. Read            = -30 -12
  28. Exit            = -30 -114
  29. ;
  30. ;
  31. ; einzige absolute Adresse:
  32. ;
  33. ExecBase = 4
  34. ;
  35. even
  36. ;
  37. ;
  38. ; Beginn des Hauptprogramms
  39. ;
  40. start:
  41.  clr.l d0
  42.  move.l ExecBase,a6
  43.  lea.l gfxname,a1
  44.  jsr oldopenlibrary(a6)
  45.  move.l d0,gfxbase
  46. ;
  47.  move.l execbase,a6
  48.  lea intname,a1
  49.  jsr oldopenlibrary(a6)
  50.  move.l d0,a6
  51.  move.l d0,intuitionbase
  52. ;
  53. ;
  54.  jsr open_dos
  55.  jsr open_file
  56.  move.l #disk_buf,d2
  57.  move.l #8,d3
  58.  jsr load
  59.  move.l d2,a0
  60. ;
  61.  move.l 4(a0),d3
  62.  move.l d3,chunk_size
  63.  jsr allocate
  64.  move.l chunk_size,d3
  65.  move.l pic_buf,d2
  66.  jsr load
  67.  jsr close_file
  68. ;
  69.  jsr iff_search
  70. ;
  71.  move.l intuitionbase,a6
  72.  lea.l newscreen,a0
  73.  jsr openscreen(a6)
  74.  move.l d0,screen
  75. ;
  76.  jsr pic_print
  77.  jsr free
  78. ;
  79. col_move:
  80.  move.l #3,d3
  81.  move.l #7,d4
  82.  jsr color_move
  83.  jsr colour_set
  84. ;
  85. wait_loop:
  86.  move.l #$2000,d1
  87. wlp1:
  88.  andi.b #64,$bfe001
  89.  beq wait_end
  90.  dbra d1,wlp1
  91.  bra col_move
  92. ;
  93. wait_end:
  94.  move.l intuitionbase,a6
  95.  move.l screen,a0
  96.  jsr closescreen(a6)
  97. ;
  98.  move.l execbase,a6
  99.  move.l intuitionbase,a1
  100.  jsr closelibrary(a6)
  101. ;
  102.  move.l gfxbase,a1
  103.  jsr closelibrary(a6)
  104. ;
  105.  move.l dos_base,a1
  106.  jsr closelibrary(a6)
  107. ;
  108. prg_end:
  109.  rts
  110. ;
  111. color_move:
  112.  lsl.l #1,d3
  113.  lsl.l #1,d4
  114.  lea.l colour_map,a0
  115.  move.l a0,a1
  116.  add.l d3,a0
  117.  add.l d4,a1
  118.  move.w (a1),d5
  119.  move.l a1,a2
  120.  sub.l #2,a2
  121.  move.w (a2),(a1)
  122. vergleich:
  123.  cmp.l a2,a0
  124.  beq color_exit
  125.  move.w -(a2),-(a1)
  126.  bra vergleich
  127. color_exit:
  128.  move.w d5,(a2)
  129.  rts
  130. ;
  131. ; Daten für Screen- und Bildschirmverwaltung
  132. ;
  133. align 4
  134. title: dc.b "The C.C.G. presents",0
  135. align 4
  136. dosname: dc.b "dos.library",0
  137. align 4
  138. intname: dc.b "intuition.library",0
  139. align 4
  140. gfxname: dc.b "graphics.library",0
  141. align 4
  142. gfxbase: blk.l 1,0
  143. intuitionbase: blk.l 1,0
  144. dos_base: blk.l 1,0
  145. ;
  146. Newscreen:
  147.  dc.w 0,0
  148. width: dc.w 320
  149. height: dc.w 200
  150.  dc.w 5
  151.  dc.b 0,1
  152. modes: dc.w $0,$0f
  153.  dc.l font
  154.  dc.l title
  155.  dc.l 0,0
  156. ;
  157. font = 0
  158. ;
  159. screen: dc.l 0
  160. ;
  161. even
  162. ;
  163. planes: blk.l 10,0
  164. colour_map: blk.w 32,0
  165. black_colour: blk.w 32,0
  166. even
  167. ;
  168. planes_init:
  169.  move.l screen,a0
  170.  add.l #$c0,a0
  171.  move.l #planes,a1
  172.  move.w planes_num,d0
  173. plane_loop:
  174.  move.w d0,d1
  175.  mulu #4,d1
  176.  move.l (a0,d1),(a1,d1)
  177.  dbra d0,plane_loop
  178.  rts
  179. ;
  180. colours_init:
  181.  move.l cmap_chunk,a0
  182.  add.l #8,a0
  183.  move.l #colour_map,a1
  184.  move.w #31,d7
  185. co_loop1:
  186.  clr.w d0
  187.  move.b (a0)+,d0
  188.  and.b #$f0,d0
  189.  lsl.w #4,d0
  190.  move.b (a0)+,d0
  191.  and.w #$0ff0,d0
  192.  clr.w d1
  193.  move.b (a0)+,d1
  194.  lsr.b #4,d1
  195.  and.b #$0f,d1
  196.  or.b d1,d0
  197.  move.w d0,(a1)+
  198.  dbra d7,co_loop1
  199. rts
  200. ;
  201. pic_print:
  202.  jsr planes_init
  203.  jsr colours_init
  204.  jsr black_colour_set
  205.  jsr unpacker
  206.  jsr colour_set
  207.  rts
  208. ;
  209. colour_set:
  210.  move.l screen,a0
  211.  add.l #44,a0
  212.  move.l #colour_map,a1
  213.  move.w #32,d0
  214.  move.l gfxbase,a6
  215.  jsr loadrgb4(a6)
  216. rts
  217. ;
  218. black_colour_set:
  219.  move.l screen,a0
  220.  add.l #44,a0
  221.  move.l #black_colour,a1
  222.  move.w #32,d0
  223.  move.l gfxbase,a6
  224.  jsr loadrgb4(a6)
  225. rts
  226. ;
  227. iff_search:
  228.  move.l pic_buf,a0
  229.  add.l #4,a0
  230.  move.l a0,bmhd_chunk
  231.  move.l 4(a0),d0
  232.  add.l d0,a0
  233.  add.l #8,a0
  234.  move.l a0,cmap_chunk
  235. iff_l1:
  236.  move.l 4(a0),d0
  237.  add.l d0,a0
  238.  add.l #8,a0
  239.  move.l #"BODY",d1
  240.  cmp.l (a0),d1
  241.  bne iff_l1
  242.  move.l a0,body_chunk
  243.  move.l bmhd_chunk,a2
  244.  move.l a2,a1
  245.  add.l #16,a1
  246.  clr.w d0
  247.  move.b (a1),d0
  248.  cmp.w #6,d0
  249.  blt iff_cont
  250.  move.w #6,d0
  251. iff_cont:
  252.  move.l #newscreen,a0
  253.  move.w d0,8(a0)
  254.  subq.w #1,d0
  255.  move.w d0,planes_num
  256. ;
  257.  move.l a2,a1
  258.  add.l #18,a1
  259.  move.b (a1),comp_flag
  260.  move.l a2,a1
  261.  add.l #8,a1
  262.  clr.l d0
  263.  move.w (a1)+,d0
  264.  move.w d0,width
  265.  clr.l d3
  266.  cmp.w #640,d0
  267.  blt iff_cont3
  268.  or.w #$8000,d3
  269. iff_cont3:
  270.  move.w d0,d1
  271.  and.w #7,d1
  272.  beq iff_cont2
  273.  or.w #8,d0
  274. iff_cont2:
  275.  divu #8,d0
  276.  move.w d0,width_bytes
  277.  clr.l d0
  278.  move.w (a1),d0
  279.  move.w d0,height
  280.  cmp.w #400,d0
  281.  blt iff_cont4
  282.  or.w #4,d3
  283. iff_cont4:
  284.  move.w d3,modes
  285.  rts
  286. ;
  287. unpacker:
  288.  move.l #planes,a2
  289.  move.l body_chunk,a0
  290.  add.l #4,a0
  291.  move.l (a0)+,d7
  292.  move.l a0,a3
  293.  add.l d7,a3
  294.  move.w planes_num,d2
  295.  addq.w #1,d2
  296. ;
  297. unp_loop:
  298.  cmp.l a3,a0
  299.  bge unpack_end
  300. ;
  301.  clr.w d3
  302. pic_loop1:
  303.  move.w d3,d4
  304.  mulu #4,d4
  305.  move.l (a2,d4),a5
  306.  jsr unpack_row
  307.  move.l a5,(a2,d4)
  308.  addq.w #1,d3
  309.  cmp.w d2,d3
  310.  blt pic_loop1
  311.  move.l bmhd_chunk,a5
  312.  andi.b #1,17(a5)
  313.  beq unp_loop
  314.  move.l #mask_dummy,a5
  315.  jsr unpack_row
  316.  bra unp_loop
  317. unpack_row: move.l d2,-(sp)
  318.  move.w width_bytes,d2
  319. unp_loop1: tst.w d2
  320.  beq unpack_row_end
  321.  clr.w d0
  322.  tst.w comp_flag
  323.  bne unp_comp
  324.  move.w width_bytes,d0
  325.  subq.w #1,d0
  326.  bra unp_loop2
  327. unp_comp:
  328.  move.b (a0)+,d0
  329.  bmi packed
  330. unp_loop2:
  331.  move.b (a0)+,(a5)+
  332.  subq.w #1,d2
  333.  dbra d0,unp_loop2
  334.  bra unp_loop1
  335. ;
  336. packed:
  337.  neg.b d0
  338.  move.b (a0)+,d1
  339. unp_loop3:
  340.  move.b d1,(a5)+
  341.  subq.w #1,d2
  342.  dbra d0,unp_loop3
  343.  bra unp_loop1
  344. ;
  345. unpack_row_end:
  346.  move.l (sp)+,d2
  347.  rts
  348. ;
  349. unpack_end:
  350.  rts
  351. ;
  352. ;
  353. ; chunk-Daten
  354. ;
  355. align 4
  356. bmhd_chunk: blk.l 1,0
  357. cmap_chunk: blk.l 1,0
  358. body_chunk: blk.l 1,0
  359. planes_num: blk.w 1,0
  360. comp_flag: blk.w 1,0
  361. width_bytes: blk.w 1,0
  362. ;
  363. ; Diskroutinen für Filehandling
  364. ;
  365. open_dos:
  366.  move.l execbase,a6
  367.  lea.l dosname,a1
  368.  jsr openlib(a6)
  369.  move.l d0,dos_base
  370.  rts
  371. ;
  372. open_file:
  373.  move.l dos_base,a6
  374.  move.l #filename,d1
  375.  move.l #1005,d2
  376.  jsr open(a6)
  377.  beq prg_end
  378.  move.l d0,bif
  379.  rts
  380. ;
  381. load:
  382.  move.l dos_base,a6
  383.  move.l bif,d1
  384.  jsr read(a6)
  385.  rts
  386. ;
  387. close_file:
  388.  move.l dos_base,a6
  389.  move.l bif,d1
  390.  jsr close(a6)
  391.  rts
  392. ;
  393. allocate:
  394.  move.l execbase,a6
  395.  move.l #$100000,d1
  396.  move.l chunk_size,d0
  397.  jsr allocmem(a6)
  398.  move.l d0,pic_buf
  399.  rts
  400. ;
  401. ;
  402. free:
  403.  move.l execbase,a6
  404.  move.l pic_buf,a1
  405.  move.l chunk_size,d0
  406.  jsr freemem(a6)
  407.  rts
  408. ;
  409. ; Daten für File handling
  410. ;
  411. align 4
  412. filename: dc.b "Waterfall",0
  413. align 4
  414. bif: dc.l 0
  415. disk_buf: blk.b 10,0
  416. align 4
  417. pic_buf: blk.l 1,0
  418. chunk_size: blk.l 1,0
  419. mask_dummy: blk.b 128,0
  420. ; -Ende-
  421.