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

  1. CloseScreen= -30 -36
  2. OpenScreen= -30 -168
  3. OpenLib= -30 -378
  4. OldOpenLibrary= -30 -378
  5. CloseLibrary= -30 -384
  6. AllocMem= -30 -168
  7. FreeMem= -30 -180
  8. LoadRGB4= -30 -162
  9. Open= -30
  10. Close= -30 -6
  11. Read= -30 -12
  12. Write= -30 -18
  13. Exit= -30 -114
  14. ExecBase= 4
  15.  
  16. even
  17. start:
  18.     clr.b sflag
  19.     jsr open_dos
  20.     move.l dos_base,a6
  21.     move.l #conname,d1
  22.     move.l #1005,d2
  23.     jsr open(a6)
  24.     move.l d0,conbase
  25.  
  26.     move.l dos_base,a6
  27.     move.l conbase,d1
  28.     move.l #text3,d2
  29.     move.l #lent3,d3
  30.     sub.l #text3,d3
  31.     jsr write(a6)
  32.  
  33.     move.l dos_base,a6
  34.     move.l conbase,d1
  35.     move.l #name1,d2
  36.     move.l #32,d3
  37.     jsr read(a6)
  38.     cmp.b #$0a,name1
  39.     beq ende3
  40.     sub.l #1,d0
  41.     move.l #name1,a0
  42.     move.b #0,(a0,d0)
  43.  
  44.     move.l dos_base,a6
  45.     move.l conbase,d1
  46.     move.l #text2,d2
  47.     move.l #lent2,d3
  48.     sub.l #text2,d3
  49.     jsr write(a6)
  50.  
  51.     move.l dos_base,a6
  52.     move.l conbase,d1
  53.     move.l #name2,d2
  54.     move.l #32,d3
  55.     jsr read(a6)
  56.     cmp.b #$0a,name2
  57.     beq ende3
  58.     sub.l #1,d0
  59.     move.l #name2,a0
  60.     move.b #0,(a0,d0)
  61.  
  62.  
  63.     clr.l d0
  64.     move.l ExecBase,a6
  65.     lea.l GfxName,a1
  66.     jsr OldOpenlibrary(a6)
  67.     move.l d0,GfxBase
  68.     move.l ExecBase,a6    
  69.     lea IntName,a1
  70.     jsr OldOpenLibrary(a6)
  71.     move.l d0,a6
  72.     move.l d0,IntuitionBase
  73.     jsr open_file
  74.     move.l #disk_buf,d2
  75.     move.l #8,d3
  76.     jsr load
  77.     move.l d2,a0
  78.     move.l 4(a0),d3
  79.     move.l d3,chunk_size
  80.     jsr allocate
  81.     move.l chunk_size,d3
  82.     move.l pic_buf,d2
  83.     jsr load
  84.     jsr close_file
  85.     jsr iff_search
  86.     move.l intuitionbase,a6
  87.     lea.l newscreen,a0
  88.     jsr openscreen(a6)
  89.     move.l d0,screen
  90.     jsr pic_print
  91.     jsr free
  92. wlp1:
  93.     andi.b #64,$bfe001
  94.     bne wlp1
  95.  
  96.     add.w #1,planes_num
  97.     clr.l d0
  98.     move.w width,d0
  99.     divu #8,d0
  100.     mulu height,d0
  101.     move.l d0,groesse
  102.     move.w planes_num,d0
  103.     move.l #2,d1
  104.     rol.l d0,d1
  105.     move.l d1,colors
  106.  
  107.     move.w planes_num,d0
  108.     move.l #planes,a0
  109.     move.l #pl1,a1
  110. bp1:    move.l (a0)+,d1
  111.     sub.l groesse,d1
  112.     move.l d1,(a1)+
  113.     sub.w #1,d0
  114.     bne bp1    
  115.  
  116.     move.w planes_num,anzahl
  117.  
  118.     move.l dos_base,a6
  119.     move.l #name2,d1
  120.     move.l #1006,d2
  121.     jsr open(a6)    
  122.     move.l d0,fn    
  123.  
  124.     move.l dos_base,a6
  125.     move.l fn,d1
  126.     move.l #anzahl,d2
  127.     move.l #2,d3
  128.     jsr write(a6)
  129.     beq ok
  130.  
  131.     move.l dos_base,a6
  132.     move.l fn,d1
  133.     move.l #width,d2
  134.     move.l #2,d3
  135.     jsr write(a6)
  136.     beq ende
  137.  
  138.     move.l dos_base,a6
  139.     move.l fn,d1
  140.     move.l #height,d2
  141.     move.l #2,d3
  142.     jsr write(a6)
  143.     beq ende
  144.  
  145.     move.l dos_base,a6
  146.     move.l fn,d1
  147.     move.l #colour_map,d2
  148.     move.l colors,d3
  149.     jsr write(a6)
  150.  
  151.     move.l pl1,d2
  152.     jsr save
  153.     sub.w #1,planes_num
  154.     beq ok
  155.     move.l pl1+4,d2
  156.     jsr save
  157.     sub.w #1,planes_num
  158.     beq ok
  159.     move.l pl1+8,d2
  160.     jsr save
  161.     sub.w #1,planes_num
  162.     beq ok
  163.     move.l pl1+12,d2
  164.     jsr save
  165.     sub.w #1,planes_num
  166.     beq ok
  167.     move.l pl1+16,d2
  168.     jsr save
  169.     sub.w #1,planes_num
  170.     jmp ok
  171.     
  172. save:
  173.     move.l dos_base,a6
  174.     move.l fn,d1
  175.     move.l groesse,d3
  176.     jsr write(a6)
  177.     beq ok
  178.     rts
  179.  
  180. ok:    move.l dos_base,a6
  181.     move.l fn,d1
  182.     jsr close(a6)
  183.     move.b #1,sflag
  184.  
  185. ende:    move.l intuitionbase,a6
  186.     move.l screen,a0
  187.     jsr closescreen(a6)
  188.     move.l execbase,a6
  189.     move.l intuitionbase,a1
  190.     jsr closelibrary(a6)
  191.     move.l gfxbase,a1
  192.     jsr closelibrary(a6)
  193. ende2:    move.l dos_base,a6
  194.     move.l conbase,d1
  195.     jsr close(a6)
  196.  
  197.     move.l execbase,a6
  198.     move.l dos_base,a1
  199.     jsr closelibrary(a6)
  200.     cmp.b #1,sflag
  201.     beq start
  202. prg_end:
  203.     illegal
  204.     rts
  205.  
  206. ende3:
  207.     move.b #0,sflag
  208.     jmp ende2
  209.     
  210. align 4
  211. title:        dc.b 'The Blade Runnesr presents:',0
  212. align 4
  213. dosname:    dc.b 'dos.library',0
  214. align 4
  215. intname:    dc.b 'intuition.library',0
  216. align 4
  217. gfxname:    dc.b 'graphics.library',0
  218. align 4
  219. gfxbase:    blk.l 1,0
  220. intuitionbase:    blk.l 1,0
  221. dos_base:    blk.l 1,0
  222.  
  223. Newscreen:
  224.     dc.w 0,0
  225. width:    dc.w 320
  226. height:    dc.w 200
  227.     dc.w 5
  228.     dc.b 0,1
  229. modes:    dc.w $0,$0f
  230.     dc.l font
  231.     dc.l title
  232.     dc.l 0,0
  233.  
  234. font = 0
  235.  
  236. screen:    dc.l 0
  237. even
  238. planes:        blk.l 10,0
  239. colour_map:    blk.w 32,0
  240. black_colour:    blk.l 32,0
  241. even
  242.  
  243. planes_init:
  244.     move.l screen,a0
  245.     add.l #$c0,a0
  246.     move.l #planes,a1
  247.     move.w planes_num,d0
  248.  
  249. plane_loop:
  250.     move.w d0,d1
  251.     mulu #4,d1
  252.     move.l (a0,d1),(a1,d1)
  253.     dbra d0,plane_loop
  254.     rts
  255. colours_init:
  256.     move.l cmap_chunk,a0
  257.     add.l #8,a0
  258.     move.l #colour_map,a1
  259.     move.w #31,d7
  260. co_loop1:
  261.     clr.w d0
  262.     move.b (a0)+,d0
  263.     and.b #$f0,d0
  264.     lsl.w #4,d0
  265.     move.b (a0)+,d0
  266.     and.w #$0ff0,d0
  267.     clr.w d1
  268.     move.b (a0)+,d1
  269.     lsr.b #4,d1
  270.     and.b #$0f,d1
  271.     or.b d1,d0
  272.     move.w d0,(a1)+
  273.     dbra d7,co_loop1
  274.     rts
  275. pic_print:
  276.     jsr planes_init
  277.     jsr colours_init    
  278.     jsr black_colour_set
  279.     jsr unpacker
  280.     jsr colour_set
  281.     rts
  282. colour_set:
  283.     move.l screen,a0
  284.     add.l #44,a0
  285.     move.l #colour_map,a1
  286.     move.w #32,d0
  287.     move.l gfxbase,a6
  288.     jsr LoadRGB4(a6)
  289.     rts
  290. black_colour_set:
  291.     move.l screen,a0
  292.     add.l #44,a0
  293.     move.l #black_colour,a1
  294.     move.w #32,d0
  295.     move.l gfxbase,a6
  296.     jsr LoadRGB4(a6)
  297.     rts
  298. iff_search:
  299.     move.l pic_buf,a0
  300.     add.l #4,a0
  301.     move.l a0,bmhd_chunk
  302.     move.l 4(a0),d0
  303.     add.l d0,a0
  304.     add.l #8,a0
  305.     move.l a0,cmap_chunk
  306. iff_l1:
  307.     move.l 4(a0),d0
  308.     add.l d0,a0
  309.     add.l #8,a0
  310.     move.l #'BODY',d1
  311.     cmp.l (a0),d1
  312.     bne iff_l1
  313.     move.l a0,body_chunk
  314.     move.l bmhd_chunk,a2
  315.     move.l a2,a1
  316.     add.l #16,a1
  317.     clr.w d0
  318.     move.b (a1),d0
  319.     cmp.w #6,d0
  320.     blt iff_cont
  321.     move.w #6,d0
  322. iff_cont:
  323.     move.l #newscreen,a0
  324.     move.w d0,8(a0)
  325.     subq.w #1,d0
  326.     move.w d0,planes_num
  327.     move.l a2,a1
  328.     add.l #18,a1
  329.     move.b (a1),comp_flag
  330.     move.l a2,a1
  331.     add.l #8,a1
  332.     clr.l d0
  333.     move.w (a1)+,d0
  334.     move.w d0,width
  335.     clr.l d3
  336.     cmp.w #640,d0
  337.     blt iff_cont3
  338.     or.w #$8000,d3
  339. iff_cont3:
  340.     move.w d0,d1
  341.     and.w #7,d1
  342.     beq iff_cont2
  343.      or.w #8,d0
  344. iff_cont2:
  345.     divu #8,d0
  346.     move.w d0,width_bytes
  347.     clr.l d0
  348.     move.w (a1),d0
  349.     move.w d0,height
  350.     cmp.w #400,d0
  351.     blt iff_cont4
  352.     or.w #4,d3
  353. iff_cont4:
  354.     move.w d3,modes
  355.     rts
  356. unpacker:
  357.     move.l #planes,a2
  358.     move.l body_chunk,a0
  359.     add.l #4,a0
  360.     move.l (a0)+,d7
  361.     move.l a0,a3
  362.     add.l d7,a3
  363.     move.w planes_num,d2
  364.     addq.w #1,d2
  365. unp_loop:
  366.     cmp.l a3,a0
  367.     bge unpack_end
  368.     clr.w d3
  369. pic_loop1:
  370.     move.w d3,d4
  371.     mulu #4,d4
  372.     move.l (a2,d4),a5
  373.     jsr unpack_row
  374.     move.l a5,(a2,d4)
  375.     addq.w #1,d3
  376.     cmp.w d2,d3
  377.     blt pic_loop1
  378.     move.l bmhd_chunk,a5
  379.     andi.b #1,17(a5)
  380.     beq unp_loop
  381.     move.l #mask_dummy,a5
  382.     jsr unpack_row
  383.     bra unp_loop
  384. unpack_row:
  385.     move.l d2,-(sp)
  386.     move.w width_bytes,d2
  387. unp_loop1:
  388.     tst.w d2
  389.     beq unpack_row_end
  390.     clr.w d0
  391.     tst.w comp_flag
  392.     bne unp_comp
  393.     move.w width_bytes,d0
  394.     subq.w #1,d0
  395.     bra unp_loop2
  396. unp_comp:
  397.     move.b (a0)+,d0
  398.     bmi packed
  399. unp_loop2:
  400.     move.b (a0)+,(a5)+
  401.     subq.w #1,d2
  402.     dbra d0,unp_loop2
  403.     bra unp_loop1
  404. packed:
  405.     neg.b d0
  406.     move.b (a0)+,d1
  407. unp_loop3:
  408.     move.b d1,(a5)+
  409.     subq.w #1,d2
  410.     dbra d0,unp_loop3
  411.     bra unp_loop1
  412. unpack_row_end:
  413.     move.l (sp)+,d2
  414.     rts
  415. unpack_end:
  416.     rts
  417.  
  418. align 4
  419. bmhd_chunk:    blk.l 1,0
  420. cmap_chunk:    blk.l 1,0
  421. body_chunk:    blk.l 1,0
  422. planes_num:    blk.l 1,0
  423. comp_flag:    blk.l 1,0
  424. width_bytes:    blk.l 1,0
  425.  
  426. open_dos:
  427.     move.l execbase,a6
  428.     lea.l dosname,a1
  429.     jsr OpenLib(a6)
  430.     move.l d0,dos_base
  431.     rts
  432.  
  433. open_file:
  434.     move.l dos_base,a6
  435.     move.l #name1,d1
  436.     move.l #1005,d2
  437.     jsr Open(a6)
  438.     beq prg_end
  439.     move.l d0,bif
  440.     rts
  441. load:
  442.     move.l dos_base,a6
  443.     move.l bif,d1
  444.     jsr Read(a6)
  445.     rts
  446. close_file:
  447.     move.l dos_base,a6
  448.     move.l bif,d1
  449.     jsr Close(a6)
  450.     rts
  451. allocate:
  452.     move.l execbase,a6
  453.     move.l #$10000,d1
  454.     move.l chunk_size,d0
  455.     jsr AllocMem(a6)
  456.     move.l d0,pic_buf
  457.     rts
  458. free:
  459.     move.l execbase,a6
  460.     move.l pic_buf,a1
  461.     move.l chunk_size,d0
  462.     jsr Freemem(a6)
  463.     rts
  464.  
  465. align 4
  466. filename:    dc.b 'df1:tbr-logo1',0
  467. align 4
  468. bif:        dc.l 0
  469. disk_buf:    blk.b 10,0
  470. align 4
  471. pic_buf:    blk.l 1,0
  472. chunk_size:    blk.l 1,0
  473. mask_dummy:    blk.b 128,0
  474. align 4
  475. fn:        blk.l 1,0
  476. align 4
  477. bild:        dc.b 'picture',0
  478. align 4
  479. pl1:        blk.l 5,0
  480. align 4
  481. conname:    dc.b 'con:0/0/640/200/'
  482.         dc.b '            THE BLADE RUNNERS PRESENT '
  483.         dc.b 'BILD-KONVERTER VERSION 0.99        ',0
  484. text3:    dc.b $0c,$0a
  485.     dc.b '                          T.B.R. Bild-Konverter '
  486.     dc.b 'V 0.99                                        '
  487.     dc.b '         ============================',$0a,$0a
  488.     dc.b '                    Written 20/04/87 by  The Blade'
  489.     dc.b ' Runners',$0a,$0a
  490.     dc.b ' Dieser Umwandler wandelt IFF-Bilder, die im LO-RES'
  491.     dc.b '-Format gespeichert sind, '
  492.     dc.b ' in ein einheitliches Bitmap-Format um. Dabei spiel'
  493.     dc.b 't es keine Rolle, ob die  '
  494.     dc.b ' Bilder gecruncht, also kompremiert sind (DELUXE-PA'
  495.     dc.b 'INT) oder ungecruncht ge- '
  496.     dc.b ' speichert wurden. Weiterhin spielt es keine Rolle,'
  497.     dc.b ' welches Groessenformat   '
  498.     dc.b ' die Bilder haben. So koennen zum Beispiel Bilder m'
  499.     dc.b 'it beliebiger X- und/oder '
  500.     dc.b ' Y-Aufloesung konvertiert werden (auch PAL-Bilder).'
  501.     dc.b $0a
  502.     dc.b ' Die Bilder werden dabei im folgenden Format gespei'
  503.     dc.b 'chert:',$0a,$0a
  504.     dc.b ' 2 Bytes - Anzahl der Bitplanes',$0a
  505.     dc.b ' 2 Bytes - Aufloesung in X-Richtung',$0a
  506.     dc.b ' 2 Bytes - Aufloesung in Y-Richtung',$0a
  507.     dc.b ' 4 bis 64 Bytes - Farbe (pro Farbe ein WORD)',$0a
  508.     dc.b ' 1 bis 5 Bitplanes'
  509.     dc.b $0a,$0a,' Name des IFF-Bildes: '
  510.     dc.b 0
  511. lent3:    equ *
  512.  
  513. text2:    dc.b $0a,' Name des neuen Bildes: ',0
  514. lent2:    equ *
  515. align 4
  516. conbase:    blk.l 1,0
  517. name1:        blk.l 8,0
  518. name2:        blk.l 8,0
  519. x:        blk.l 1,0
  520. groesse:    blk.l 1,0
  521. colors:        blk.l 1,0
  522. anzahl:        dc.w 0
  523. sflag:        dc.b 0
  524.