home *** CD-ROM | disk | FTP | other *** search
/ swCHIP 1991 January / swCHIP_95-1.bin / dos / malbuch / malbuch.mac < prev   
Text File  |  1995-12-09  |  53KB  |  2,276 lines

  1. ; 22. 4.94
  2. ;  7.11.94 Uebersicht mit Rand
  3. ;  3. 1.95 option -c (kein Farbaenderung durch rechte Maustaste)
  4. ;          option -m (zusaetzlich keine Mischfarben)
  5. ; 11. 1.95 PostScript Plot
  6.  
  7.  
  8.         ; klee@informatik.unibw-muenchen.de
  9.  
  10.         nolist
  11.         ycount=32       ; 1,2,4,6,16 oder 32
  12.  
  13.         @=$100
  14.  
  15. start:  br.w    main
  16.  
  17. ende:   move.w  #$4c00,r0
  18.         trap    #$21
  19.  
  20.  
  21. read_ch:
  22.         ; Eingabe: keine
  23.         ; Ausgabe: r0.b : ascii  m0.b : erweiterter Code
  24.         move.w  #0,r0
  25.         move.w  r3,-(sp)
  26.         trap    #$16
  27.         move.w  (sp)+,r3
  28.         rts.w
  29.  
  30. read_if_ch:
  31.         ; Eingabe: keine
  32.         ; Ausgabe: z-flag = 0 fall Zeichen vorhanden, dann:
  33.         ;          r0.b : ascii  m0.b : erweiterter Code
  34.         move.w  #$100,r0
  35.         trap    #$16
  36.         rts.w
  37.  
  38. print_ch:
  39.         ; Eingabe: r0.b auszugebendes Zeichen
  40.         ; Ausgabe: keine
  41.         movem.l r0-r7,-(sp)
  42.         move.w  s1,-(sp)
  43.         move.b  #$0e,m0
  44.         move.b  #0,r3
  45.         trap    #$10
  46.         move.w  (sp)+,s1
  47.         movem.l (sp)+,r0-r7
  48.         rts.w
  49.  
  50. print_string:
  51.         ; Eingabe: r0.w{s0} : pointer auf string durch 0 abgeschlossen
  52.         ; Ausgabe: keine
  53.         movem.l r0-r7,-(sp)
  54.         move.w  r0,r3
  55.  
  56. _20:    move.b  (r3.w),r0
  57.         tst.b   r0,r0
  58.         beq.b   _10
  59.         inc.w   r3
  60.         bsr.w   print_ch
  61.         br.b    _20
  62. _10:    movem.l (sp)+,r0-r7
  63.         rts.w
  64.  
  65.  
  66. print_hex_l:
  67.         ; Eingabe r0.l auszugebendes Langwort
  68.         ; Ausgabe keine
  69.         movem.l r0-r7,-(sp)
  70.         move.l  r0,r1
  71.  
  72.         move.w  #8,r2
  73. _20:    rol.l   #4,r1
  74.         move.b  r1,r0
  75.         andq.l  #$0f,r0
  76.         add.b   #'0',r0
  77.         cmp.b   #'9',r0
  78.         bls.b    _10
  79.         add.b   #'a'-'9'-1,r0
  80. _10:    bsr.w   print_ch
  81.         dbf.w   r2,_20
  82.         movem.l (sp)+,r0-r7
  83.         rts.w
  84.  
  85. maus_init:
  86.         movem.w r0-r7,-(sp)
  87.         move.w  #$0007,r0
  88.         move.w  #639,r1
  89.         eor.w   r2,r2
  90.         trap    #$33
  91.         move.w  #$0008,r0
  92.         move.w  #479,r1
  93.         eor.w   r2,r2
  94.         trap    #$33
  95.         movem.w (sp)+,r0-r7
  96.         rts.w
  97.  
  98. maus_on:
  99.         move.w  r0,-(sp)
  100.         move.w  #1,r0
  101.         trap    #$33
  102.         move.w  (sp)+,r0
  103.         rts.w
  104.  
  105.  
  106. maus_off:
  107.         move.w  r0,-(sp)
  108.         move.w  #2,r0
  109.         trap    #$33
  110.         move.w  (sp)+,r0
  111.         rts.w
  112.  
  113. maus_read:
  114.         move.w  r1,-(sp)
  115.         move.w  r2,-(sp)
  116.         move.w  r3,-(sp)
  117.         move.w  #3,r0
  118.         trap    #$33
  119.         move.w  r1,ypos
  120.         move.w  r2,xpos
  121.         move.w  r3,r0
  122.         move.w  (sp)+,r3
  123.         move.w  (sp)+,r2
  124.         move.w  (sp)+,r1
  125.         rts.w
  126.  
  127. init_graph:
  128.         move.w  r0,-(sp)
  129.         move.w  r1,-(sp)
  130.  
  131.         move.w  #$12,r0    ; 640x480 16 Farben
  132.         trap    #$10
  133.  
  134.         move.w  #$3ce,r1
  135.         move.w  #$0f01,r0
  136.         out.w   r0,r1   ; Enable Set/Reset = f
  137.  
  138.         move.w  #$0305,r0   ; Write Mode 3
  139.         out.w   r0,r1
  140.  
  141.         move.w  (sp)+,r1
  142.         move.w  (sp)+,r0
  143.         rts.w
  144.  
  145. set_gmode:
  146.         move.w  r0,-(sp)
  147.         move.w  r1,-(sp)
  148.  
  149.         move.w  #$3ce,r1
  150.         move.w  #$0f01,r0
  151.         out.w   r0,r1   ; Enable Set/Reset = f
  152.  
  153.         move.w  #$0305,r0   ; Write Mode 3
  154.         out.w   r0,r1
  155.  
  156.         move.w  (sp)+,r1
  157.         move.w  (sp)+,r0
  158.         rts.w
  159.  
  160. set_grau_palette:
  161.         movem.w r0-r7,-(sp)
  162.         move.w  #palette_grau,r5
  163.         br.b    set_palette1
  164. set_palette:
  165.         movem.w r0-r7,-(sp)
  166.         move.w  #palette,r5
  167. set_palette1:
  168.         move.w  #$3c8,r1
  169.  
  170.         eor.b   r0,r0
  171.         out.b   r0,r1
  172.         move.w  #6*3,r2
  173.         bsr.w   _200
  174.  
  175.         move.b  #$14,r0
  176.         out.b   r0,r1
  177.         move.w  #1*3,r2
  178.         bsr.w   _200
  179.  
  180.         move.b  #$07,r0
  181.         out.b   r0,r1
  182.         move.w  #1*3,r2
  183.         bsr.w   _200
  184.  
  185.         move.b  #$38,r0
  186.         out.b   r0,r1
  187.         move.w  #8*3,r2
  188.         bsr.w   _200
  189.         movem.w (sp)+,r0-r7
  190.         rts.w
  191.  
  192. _200:   inc.w   r1
  193. _210:   move.b  (r5.w),r0
  194.         inc.w   r5
  195.         out.b   r0,r1
  196.         dbf.w   r2,_210
  197.         dec.w   r1
  198.         rts.w
  199.  
  200. set_color:
  201.         ; setzt color als die aktuelle Farbe
  202.         ; veraendert keine Register
  203.         move.w  r0,-(sp)
  204.         move.w  r1,-(sp)
  205.         move.w  #$3ce,r1
  206.         move.b  color,m0
  207.         and.b   #$0f,m0
  208.         eor.b   r0,r0
  209.         out.w   r0,r1
  210.         move.w  (sp)+,r1
  211.         move.w  (sp)+,r0
  212.         rts.w
  213.  
  214. white_screen:
  215.         move.l  r0,-(sp)
  216.         move.w  #$0f00,r0
  217.         br.b    .black_screen
  218. black_screen:
  219.         ; loescht Bildschirm
  220.         ; veraendert keine Register
  221.         move.l  r0,-(sp)
  222.         eor.w   r0,r0
  223. .black_screen:
  224.         move.w  r1,-(sp)
  225.         move.w  r2,-(sp)
  226.         move.w  r6,-(sp)
  227.  
  228.         move.w  #$3ce,r1
  229.         out.w   r0,r1
  230.  
  231.         bsr.w   set_gmode
  232.         
  233.         move.w  #640*480/32,r2
  234.         eor.l   r0,r0
  235.         dec.l   r0
  236.         eor.w   r6,r6
  237. _10:    move.l  r0,(r6.w){s1}
  238.         addq.w  #4,r6
  239.         dbf.w   r2,_10
  240.  
  241.         move.w  (sp)+,r6
  242.         move.w  (sp)+,r2
  243.         move.w  (sp)+,r1
  244.         move.l  (sp)+,r0
  245.         rts.w
  246.  
  247. black_gitter:
  248.         ; veraendert keine Register
  249.         move.l  r0,-(sp)
  250.         move.w  r1,-(sp)
  251.         move.w  r2,-(sp)
  252.         move.w  r6,-(sp)
  253.  
  254.         eor.w   r0,r0
  255.         move.w  #$3ce,r1
  256.         out.w   r0,r1
  257.  
  258.         bsr.w   set_gmode
  259.         
  260.         move.w  #10*480,r2
  261.         move.b  #1,r0
  262.         move.w  #7,r6
  263. _10:    move.b  (r6.w){s1},r1
  264.         move.b  r0,(r6.w){s1}
  265.         add.w   #8,r6
  266.         dbf.w   r2,_10
  267.  
  268.         eor.l   r0,r0
  269.         dec.l   r0
  270.         move.w  #80*47,r6
  271.         move.w  #10,r1
  272. _21:    move.w  #20,r2
  273. _20:    move.l  r0,(r6.w){s1}
  274.         addq.w  #4,r6
  275.         dbf.w   r2,_20
  276.         add.w   #80*47,r6
  277.         dec.w   r1
  278.         bne.b   _21
  279.  
  280.         move.w  (sp)+,r6
  281.         move.w  (sp)+,r2
  282.         move.w  (sp)+,r1
  283.         move.l  (sp)+,r0
  284.         rts.w
  285.  
  286.  
  287. hintergrund_halb:
  288.         movem.l r0-r7,-(sp)
  289.         move.w  #40/4,r1
  290.         move.w  #40,r4
  291.         br.b    hintergrund0
  292.  
  293. hintergrund:
  294.         movem.l r0-r7,-(sp)
  295.         move.w  #80/4,r1
  296.         eor.w   r4,r4
  297. hintergrund0:
  298.         
  299.         bsr.w   set_gmode
  300.  
  301.         move.w  #15,color
  302.         bsr.w   set_color
  303.  
  304.         eor.w   r5,r5
  305.         move.w  #480,r3
  306. _10:    move.w  r1,r2
  307. _20:    move.b  (r5.w){s1},r0
  308.         move.b  3.b(r5.w){s2},r0
  309.         move.b  r0,(r5.w){s1}
  310.         inc.w   r5
  311.         move.b  (r5.w){s1},r0
  312.         move.b  1.b(r5.w){s2},r0
  313.         move.b  r0,(r5.w){s1}
  314.         inc.w   r5
  315.         move.b  (r5.w){s1},r0
  316.         move.b  -1.b(r5.w){s2},r0
  317.         move.b  r0,(r5.w){s1}
  318.         inc.w   r5
  319.         move.b  (r5.w){s1},r0
  320.         move.b  -3.b(r5.w){s2},r0
  321.         move.b  r0,(r5.w){s1}
  322.         inc.w   r5
  323.         dbf.w   r2,_20
  324.         add.w   r4,r5
  325.         dec.w   r3
  326.         bne.b   _10
  327.  
  328.         movem.l (sp)+,r0-r7
  329.         rts.w
  330.  
  331.  
  332. fill:   movem.l r0-r7,-(sp)
  333.  
  334.         eor.l   r6,r6
  335.         eor.l   r0,r0
  336.         move.w  #80*480/4,r2
  337. _10:    move.l  r0,(r6.w){s3}
  338.         addq.w  #4,r6
  339.         dbf.w   r2,_10
  340.  
  341.         move.w  #xpos,r5
  342.         move.w  #ypos,r6
  343.         move.w  #1,r0
  344.         eor.w   r1,r1
  345.         move.w  #1,r3
  346.  
  347.         br.b    _130
  348.  
  349. _132:   add.w   r0,(r5.w)
  350.         inc.w   r1
  351.         cmp.w   r1,r3
  352.         bne.b   _130
  353.         eor.w   r1,r1
  354.         exg.w   r5,r6
  355.         cmp.w   #xpos,r5
  356.         bne.b   _130
  357.         neg.w   r0
  358.         inc.w   r3
  359.         cmp.w   #20,r3
  360.         bhi.w   _100
  361.  
  362. _130:   cmp.w   #639,xpos
  363.         bhi.b   _132
  364.         cmp.w   #479,ypos
  365.         bhi.b   _132
  366.  
  367.         muls.l  #640,ypos,r2
  368.         add.l   xpos,r2
  369.         eor.b   #$1f,r2
  370.         btst.l  r2,0.w{s2}
  371.         bcc.b   _132
  372.         bset.l  r2,0.w{s3}
  373.  
  374.         move.l  ypos,r4
  375.         move.w  r4,_oben
  376.         move.w  r4,_unten
  377.         move.w  r4,r3
  378.         bsr.w   _fill_line
  379.         br.b    _28
  380.  
  381. _25:    move.w  _unten,r3
  382.         move.w  _oben,r4
  383.         move.w  #0,_unten
  384.         move.w  #1000,_oben
  385. _28:    cmp.w   #479,r3
  386.         bhs.b   _20
  387.         inc.w   r3
  388. _20:    inc.w   r4
  389.         cmp.w   r3,r4
  390.         bhi.b   _29
  391. _27:    muls.l  #80,r4,r5
  392. _24:    move.w  #20,r2
  393.  
  394. _23:    move.l  -80.b(r5.w){s3},r0
  395.         or.l    (r5.w){s3},r0
  396.         and.l   (r5.w){s2},r0
  397.         cmp.l   r0,(r5.w){s3}
  398.         bne.b   _22
  399.         addq.w  #4,r5
  400.         dbf.w   r2,_23
  401.         br.b    _20
  402.  
  403. _21:    move.l  -80.b(r5.w){s3},r0
  404.         or.l    (r5.w){s3},r0
  405.         and.l   (r5.w){s2},r0
  406. _22:    move.l  r0,(r5.w){s3}
  407.         addq.w  #4,r5
  408.         dbf.w   r2,_21
  409.         bsr.w   _fill_line
  410.         bcc.b   _26
  411.         move.w  r4,_unten
  412.         cmp.w   _oben,r4
  413.         bhs.b   _26
  414.         move.w  r4,_oben
  415. _26:    inc.w   r4
  416.         cmp.w   #479,r4
  417.         bls.b   _27
  418. _29:    cmp.w   #1000,_oben
  419.         beq.b   _50
  420.  
  421.         move.w  _oben,r3
  422.         move.w  _unten,r4
  423.         move.w  #0,_unten
  424.         move.w  #1000,_oben
  425.  
  426.         dec.w   r3
  427.         bpl.b  _30
  428.         inc.w   r3
  429.  
  430. _30:    dec.w   r4
  431.         bmi.b   _39
  432.         cmp.w   r3,r4
  433.         blo.b   _39
  434. _37:    muls.l  #80,r4,r5
  435. _34:    move.w  #20,r2
  436.  
  437. _33:    move.l  80.b(r5.w){s3},r0
  438.         or.l    (r5.w){s3},r0
  439.         and.l   (r5.w){s2},r0
  440.         cmp.l   r0,(r5.w){s3}
  441.         bne.b   _32
  442.         addq.w  #4,r5
  443.         dbf.w   r2,_33
  444.         br.b    _30
  445.  
  446. _31:    move.l  80.b(r5.w){s3},r0
  447.         or.l    (r5.w){s3},r0
  448.         and.l   (r5.w){s2},r0
  449. _32:    move.l  r0,(r5.w){s3}
  450.         addq.w  #4,r5
  451.         dbf.w   r2,_31
  452.         bsr.w   _fill_line
  453.         bcc.b   _36
  454.         move.w  r4,_oben
  455.         cmp.w   _unten,r4
  456.         bls.b   _36
  457.         move.w  r4,_unten
  458. _36:    dec.w   r4
  459.         bpl.b   _37
  460. _39:    cmp.w   #1000,_oben
  461.         bne.w   _25
  462.  
  463. _50:
  464.         bsr.w   set_gmode
  465.         move.w  color1,r0
  466.         move.w  r0,color
  467.         bsr.w   set_color
  468.  
  469.  
  470.         move.w  #-1,r1
  471.         eor.w   r5,r5
  472.         move.w  #80*480/4,r2
  473. _99:    move.l  (r5.w){s3},r0
  474.         or.l    r0,r0
  475.         bne.b   _96
  476.         addq.w  #4,r5
  477.         dbf.w   r2,_99
  478.         br.b    _97
  479.  
  480. _96:    or.w    r1,r1
  481.         bpl.b   _98
  482.  
  483.         move.l  r0,r4
  484.         inc.w   r1
  485.         move.w  #80*480/4,r0
  486.         sub.w   r2,r0
  487.         lsl.w   #2,r0
  488.         move.w  #80,r3
  489.         divu.w  r3,r1|r0
  490.         lsl.l   #16,r0
  491.         move.w  r1,r0
  492.         lsl.w   #3,r0
  493.         bscr.l  r4,r1
  494.         eor.b   #$1f,r1
  495.         add.w   r1,r0
  496.         move.l  r0,r1
  497.  
  498. _98:    move.b  (r5.w){s1},r0
  499.         move.b  3.b(r5.w){s3},r0
  500.         move.b  r0,(r5.w){s1}
  501.         inc.w   r5
  502.         move.b  (r5.w){s1},r0
  503.         move.b  1.b(r5.w){s3},r0
  504.         move.b  r0,(r5.w){s1}
  505.         inc.w   r5
  506.         move.b  (r5.w){s1},r0
  507.         move.b  -1.b(r5.w){s3},r0
  508.         move.b  r0,(r5.w){s1}
  509.         inc.w   r5
  510.         move.b  (r5.w){s1},r0
  511.         move.b  -3.b(r5.w){s3},r0
  512.         move.b  r0,(r5.w){s1}
  513.         inc.w   r5
  514.         dbf.w   r2,_99
  515. _97:
  516.  
  517.         move.w  color2,r0
  518.         cmp.w   color1,r0
  519.         beq.b   _91
  520.         move.w  r0,color
  521.         bsr.w   set_color
  522.  
  523. ; falls mischfarben
  524.         eor.w   r5,r5
  525.         move.b  #$55,r3
  526.         move.w  #480,r4
  527.  
  528. _93:    move.w  #80/4,r2
  529.         ror.b   #1,r3
  530. _92:    move.l  (r5.w){s3},r0
  531.         or.l    r0,r0
  532.         bne.b   _94
  533.         addq.w  #4,r5
  534.         dbf.w   r2,_92
  535.         dec.w   r4
  536.         bne.b   _93
  537.         br.b    _91
  538.  
  539. _94:    move.b  (r5.w){s1},r0
  540.         move.b  3.b(r5.w){s3},r0
  541.         and.b    r3,r0
  542.         move.b  r0,(r5.w){s1}
  543.         inc.w   r5
  544.         move.b  (r5.w){s1},r0
  545.         move.b  1.b(r5.w){s3},r0
  546.         and.b   r3,r0
  547.         move.b  r0,(r5.w){s1}
  548.         inc.w   r5
  549.         move.b  (r5.w){s1},r0
  550.         move.b  -1.b(r5.w){s3},r0
  551.         and.b   r3,r0
  552.         move.b  r0,(r5.w){s1}
  553.         inc.w   r5
  554.         move.b  (r5.w){s1},r0
  555.         move.b  -3.b(r5.w){s3},r0
  556.         and.b   r3,r0
  557.         move.b  r0,(r5.w){s1}
  558.         inc.w   r5
  559.         dbf.w   r2,_92
  560.         dec.w   r4
  561.         bne.b   _93
  562.  
  563. _91:    move.l  r1,r0
  564.         move.w  #fillbuff,r5
  565.         move.w  fillcount,r2
  566.         or.w    r2,r2
  567.         beq.b   _83
  568. _82:    cmp.l   (r5.w),r0
  569.         beq.b   _81
  570.         addq.w  #6,r5
  571.         dbf.w   r2,_82
  572. _83:    move.l  r0,(r5.w)
  573.         inc.w   fillcount
  574.         cmp.w   #512,fillcount
  575.         bhs.b   _100
  576. _81:    move.b  color1,r0
  577.         move.b  color2,m0
  578.         move.w  r0,4.b(r5.w)
  579.  
  580. _100:   movem.l (sp)+,r0-r7
  581.         rts.w
  582.  
  583.  
  584. _oben:  dc.w    0
  585. _unten: dc.w    0
  586.  
  587. _fill_line:
  588.         eor.w   r6,r6
  589.         muls.l  #80,r4,r5
  590.         eor.b   r0,r0
  591.         move.w  #20,r2
  592. _fl20:  lsr.b   #1,r0           ; Bit 0 in Carry
  593.         move.l  (r5.w){s3},r0
  594.         move.l  r0,r1
  595.         rocr.l  #1,r0
  596.         br.b    _fl23
  597. _fl21:  lsr.l   #1,r0
  598. _fl23:  or.l    r1,r0
  599.         and.l   (r5.w){s2},r0
  600.         cmp.l   r1,r0
  601.         beq.b   _fl22
  602.         move.w  #-1,r6
  603.         move.l  r0,r1
  604.         br.b    _fl21
  605. _fl22:  move.l  r0,(r5.w){s3}
  606.         addq.w  #4,r5
  607.         dbf.w   r2,_fl20
  608.  
  609.         eor.l   r0,r0
  610.         move.w  #20,r2
  611. _fl30:  subq.w  #4,r5
  612.         lsl.l   #1,r0           ; Bit 31 in Carry
  613.         move.l  (r5.w){s3},r0
  614.         move.l  r0,r1
  615.         rocl.l  #1,r0
  616.         br.b    _fl33
  617. _fl31:  lsl.l   #1,r0
  618. _fl33:  or.l    r1,r0
  619.         and.l   (r5.w){s2},r0
  620.         cmp.l   r1,r0
  621.         beq.b   _fl32
  622.         move.w  #-1,r6
  623.         move.l  r0,r1
  624.         br.b    _fl31
  625. _fl32:  move.l  r0,(r5.w){s3}
  626.         dbf.w   r2,_fl30
  627.  
  628.         lsr.w   #1,r6   ; Carry setzen
  629.         rts.w
  630.  
  631.  
  632.  
  633.  
  634. new_color:
  635.         movem.l r0-r7,-(sp)
  636.  
  637.         and.w   #$fff8,xpos
  638.         cmp.w   #640-64,xpos
  639.         bls.b   _10
  640.         move.w  #640-64,xpos
  641. _10:    cmp.w   #480-64,ypos
  642.         bls.b   _11
  643.         move.w  #480-64,ypos
  644. _11:    sub.w   #64,xpos
  645.         bpl.b   _12
  646.         move.w  #0,xpos
  647. _12:    sub.w   #64,ypos
  648.         bpl.b   _13
  649.         move.w  #0,ypos
  650. _13:
  651.         move.w  xpos,r0
  652.         move.w  r0,xpos1
  653.         move.w  ypos,r0
  654.         move.w  r0,ypos1
  655.  
  656.         muls.w  #80,ypos,r4
  657.         move.w  xpos,r1
  658.         lsr.w   #3,r1
  659.         add.w   r1,r4
  660.         move.w  r4,-(sp)
  661.  
  662.         move.w  #bild_save,r6
  663.         move.w  #$3ce,r1
  664.         move.w  #$0004,r0
  665.         out.w   r0,r1   ; Plane 0 lesen
  666.         bsr.w   _500
  667.         move.w  #$0104,r0
  668.         out.w   r0,r1   ; Plane 1 lesen
  669.         bsr.w   _500
  670.         move.w  #$0204,r0
  671.         out.w   r0,r1   ; Plane 2 lesen
  672.         bsr.w   _500
  673.         move.w  #$0304,r0
  674.         out.w   r0,r1   ; Plane 3 lesen
  675.         bsr.w   _500
  676.  
  677. _14:    move.w  #0,color
  678.         bsr.w   set_gmode
  679.         eor.l   r0,r0
  680.         dec.l   r0
  681.  
  682.         move.w  #4,r1
  683. _36:    move.w  #4,r3
  684. _35:    move.w  r4,r5
  685.         addq.w  #4,r4
  686.         move.w  #32,r2
  687.         bsr.w   set_color
  688.         inc.w   color
  689. _34:    move.l  r0,(r5.w){s1}
  690.         add.w   #80,r5
  691.         dbf.w   r2,_34
  692.         dec.w   r3
  693.         bne.b   _35
  694.         add.w   #32*80-16,r4
  695.         dec.w   r1
  696.         bne.b   _36
  697.  
  698. _51:    bsr.w   maus_read
  699.         or.b    r0,r0
  700.         bne.b   _51
  701.  
  702.         bsr.w   maus_on
  703. _50:    bsr.w   maus_read
  704.         tst.b   #3,r0
  705.         beq.b   _50
  706.         move.b  r0,r3
  707.         bsr.w   maus_off
  708.  
  709.         move.w  xpos,r0
  710.         sub.w   xpos1,r0
  711.         bmi.w   _60
  712.         cmp.w   #4*32,r0
  713.         bhs.w   _60
  714.         lsr.w   #5,r0
  715.  
  716.         move.w  ypos,r1
  717.         sub.w   ypos1,r1
  718.         bmi.w   _60
  719.         cmp.w   #4*32,r1
  720.         bhs.w   _60
  721.         lsr.w   #5,r1
  722.  
  723.         lsl.w   #2,r1
  724.         add.w   r1,r0
  725.         move.w  r0,color1
  726.         move.w  r0,color2
  727.         move.b  #0,auto_color
  728. .no_change_color:
  729.         cmp.b   #2,r3
  730.         bne.w   _61
  731. .no_mix_color:
  732.         cmp.w   #0,color1
  733.         bls.b   _70
  734.         cmp.w   #15,color1
  735.         beq.b   _70
  736.         move.w  (sp)+,r4
  737.         move.w  r4,-(sp)
  738.         bsr.w   change_color
  739.         bcc.w   _61
  740.         br.w    _14
  741.  
  742. _70:    bsr.w   set_gmode
  743.         move.w  #0,color
  744.         move.w  (sp)+,r4
  745.         move.w  r4,-(sp)
  746.         move.b  #$55,r1
  747.  
  748.  
  749. _74:    bsr.w   set_color
  750.         move.w  color,r5
  751.         add.w   r4,r5
  752.         move.w  #8*9,r2
  753. _71:    move.b  (r5.w){s1},r0
  754.         move.b  r1,(r5.w){s1}
  755.         addq.w  #80,r5
  756.         ror.b   #1,r1
  757.         dbf.w   r2,_71
  758.  
  759. _79:    move.w  color,r5
  760.         add.w   r4,r5
  761.         eor.w   r3,r3
  762. _77:    move.w  #8,r2
  763. _73:    move.b  (r5.w){s1},r0
  764.         ror.b   #1,r1
  765.         move.b  r1,(r5.w){s1}
  766.         add.w   #80,r5
  767.         dbf.w   r2,_73
  768.         cmp.w   color,r3
  769.         bne.b   _78
  770.         addq.w  #16,r5
  771. _78:    dec.w   r5
  772.         inc.w   r3
  773.         cmp.w   #9,r3
  774.         bne.b   _77
  775.  
  776.         inc.w   color
  777.         cmp.w   #15,color
  778.         bls.b   _74
  779.  
  780. _75:    bsr.w   maus_read
  781.         or.b    r0,r0
  782.         bne.b   _75
  783.         move.w  #0,_color1
  784.         move.w  #0,_color2
  785.  
  786. _90:    bsr.w   set_gmode
  787.  
  788.         move.w  _color1,r0
  789.         move.w  r0,color
  790.         bsr.w   set_color
  791.  
  792.         move.w  r4,r5
  793.         add.w   #9*8*80,r5
  794.         move.w  r5,r6
  795.         move.b  #$55,r1
  796.         move.w  #7*8,r3
  797. _93:    move.w  #16,r2
  798. _92:    move.b  (r5.w){s1},r0
  799.         move.b  r1,(r5.w){s1}
  800.         inc.w   r5
  801.         dbf.w   r2,_92
  802.         ror.b   #1,r1
  803.         addq.w  #80-16,r5
  804.         dec.w   r3
  805.         bne.b   _93
  806.  
  807. _91:    move.w  _color2,r0
  808.         move.w  r0,color
  809.         bsr.w   set_color
  810.  
  811.         ror.b   #1,r1
  812.         move.w  #7*8,r3
  813. _96:    move.w  #16,r2
  814. _95:    move.b  (r6.w){s1},r0
  815.         move.b  r1,(r6.w){s1}
  816.         inc.w   r6
  817.         dbf.w   r2,_95
  818.         ror.b   #1,r1
  819.         addq.w  #80-16,r6
  820.         dec.w   r3
  821.         bne.b   _96
  822.  
  823.         bsr.w   maus_on
  824. _76:    bsr.w   maus_read
  825.         tst.b   #3,r0
  826.         bne.b   _62
  827.  
  828.         move.w  xpos,r0
  829.         sub.w   xpos1,r0
  830.         bmi.b   _20
  831.         cmp.w   #16*8,r0
  832.         blo.b   _21
  833. _20:    eor.w   r0,r0
  834.         eor.w   r1,r1
  835.         br.b    _29
  836. _21:    lsr.w   #3,r0
  837.  
  838.         move.w  ypos,r1
  839.         sub.w   ypos1,r1
  840.         bmi.b   _22
  841.         cmp.w   #9*8,r1
  842.         blo.b   _23
  843. _22:    eor.w   r0,r0
  844.         eor.w   r1,r1
  845. _23:    lsr.w   #3,r1
  846.         add.w   r0,r1
  847.         and.b   #$0f,r1
  848.  
  849.  
  850. _29:    cmp.w   r0,_color1
  851.         bne.b   _24
  852.         cmp.w   r1,_color2
  853.         beq.b   _76
  854. _24:    move.w  r0,_color1
  855.         move.w  r1,_color2
  856.         bsr.w   maus_off
  857.         br.w    _90
  858.  
  859.  
  860. _62:    move.b  r0,r3
  861.         bsr.w   maus_off
  862.  
  863.         move.w  xpos,r0
  864.         sub.w   xpos1,r0
  865.         bmi.b   _60
  866.         cmp.w   #16*8,r0
  867.         bhs.b   _60
  868.         lsr.w   #3,r0
  869.  
  870.         move.w  ypos,r1
  871.         sub.w   ypos1,r1
  872.         bmi.b   _60
  873.         cmp.w   #9*8,r1
  874.         bhs.b   _60
  875.         lsr.w   #3,r1
  876.         add.w   r0,r1
  877.         and.b   #$0f,r1
  878.  
  879.         move.w  r0,color1
  880.         move.w  r1,color2
  881.  
  882.         move.b  #0,auto_color
  883.         cmp.b   #2,r3
  884.         bne.b   _61
  885.         br.w    _14
  886.  
  887.  
  888. _60:    move.b  #-1,auto_color
  889.         move.w  color1,r0
  890.         or.w    r0,r0
  891.         bne.b   _64
  892.         inc.w   r0
  893.         move.w  r0,color1
  894. _64:    move.w  r0,color2
  895.  
  896. _61:    move.w  (sp)+,r4
  897.         move.w  #bild_save,r6
  898.         move.w  #$3ce,r1
  899.         move.w  #$0005,r0   ; Write Mode 3
  900.         out.w   r0,r1
  901.         move.w  #$ff08,r0   ; bit mask
  902.         out.w   r0,r1
  903.         move.w  #$0001,r0   ; enable set/reset
  904.         out.w   r0,r1
  905.  
  906.         move.w  #$3c4,r1
  907.         move.w  #$0102,r0   ; plane 0 schreiben
  908.         out.w   r0,r1
  909.         bsr.w   _600
  910.         move.w  #$0202,r0   ; plane 1 schreiben
  911.         out.w   r0,r1
  912.         bsr.w   _600
  913.         move.w  #$0402,r0   ; plane 2 schreiben
  914.         out.w   r0,r1
  915.         bsr.w   _600
  916.         move.w  #$0802,r0   ; plane 3 schreiben
  917.         out.w   r0,r1
  918.         bsr.w   _600
  919.  
  920. _80:    bsr.w   maus_read
  921.         cmp.b   #0,r0
  922.         bne.b   _80
  923.  
  924.  
  925.         movem.l (sp)+,r0-r7
  926.         rts.w
  927.  
  928. even
  929. _color1:        dc.w    0
  930. _color2:        dc.w    0
  931.  
  932. _500:   move.w  r4,r5
  933.         move.w  #4*32,r3
  934. _520:   move.w  #4,r2
  935. _510:   move.l  (r5.w){s1},r0
  936.         move.l  r0,(r6.w)
  937.         addq.l  #4,r5
  938.         addq.l  #4,r6
  939.         dbf.w   r2,_510
  940.         add.w   #80-16,r5
  941.         dec.w   r3
  942.         bne.b   _520
  943.         rts.w
  944.  
  945.  
  946. _600:   move.w  r4,r5
  947.         move.w  #4*32,r3
  948. _620:   move.w  #4,r2
  949. _610:   move.l  (r6.w),r0
  950.         move.l  r0,(r5.w){s1}
  951.         addq.l  #4,r5
  952.         addq.l  #4,r6
  953.         dbf.w   r2,_610
  954.         add.w   #80-16,r5
  955.         dec.w   r3
  956.         bne.b   _620
  957.         rts.w
  958.  
  959.  
  960. change_color:
  961.  
  962.         move.w  color1,r6
  963.         lsl.w   #1,r6
  964.         add.w   color1,r6
  965.         add.w   #palette,r6
  966.  
  967.         move.w  #0,color
  968.  
  969.         bsr.w   set_gmode
  970.         eor.l   r0,r0
  971.         dec.l   r0
  972.  
  973.         move.w  #2,r3
  974.         move.w  r4,r5
  975.  
  976. _20:    move.w  #64,r2
  977.         bsr.w   set_color
  978.  
  979. _10:    move.l  r0,(r5.w){s1}
  980.         move.l  r0,4.b(r5.w){s1}
  981.         move.l  r0,8.b(r5.w){s1}
  982.         move.l  r0,12.b(r5.w){s1}
  983.         add.w   #80,r5
  984.         dbf.w   r2,_10
  985.  
  986.         move.w  color1,r2
  987.         move.w  r2,color
  988.         dec.w   r3
  989.         bne.b   _20
  990.  
  991. _60:    bsr.w   maus_read
  992.         or.b    r0,r0
  993.         bne.b   _60
  994.  
  995. _50:    bsr.w   set_gmode
  996.         move.w  #15,color
  997.         bsr.w   set_color
  998.         move.w  r4,r5
  999.         add.w   #4*80,r5
  1000.         eor.l   r0,r0
  1001.         dec.l   r0
  1002.  
  1003.         bsr.w   _200
  1004.         add.w   #4*80,r5
  1005.         bsr.w   _200
  1006.         add.w   #4*80,r5
  1007.         bsr.w   _200
  1008.  
  1009.         move.w  #0,color
  1010.         bsr.w   set_color
  1011.  
  1012.         move.w  r4,r3
  1013.         add.w   #4*80,r3
  1014.         move.b  #3,m1
  1015. _40:
  1016.         eor.w   r0,r0
  1017.         move.b  (r6.w),r0
  1018.         inc.w   r6
  1019.         and.w   #$3f,r0
  1020.         bne.b   _41
  1021.         move.w  r3,r5
  1022.         move.b  #$40,r1
  1023.         br.b    _42
  1024. _41:    move.w  r0,r5
  1025.         lsr.w   #2,r5
  1026.         add.w   r3,r5
  1027.         lsl.b   #1,r0
  1028.         not.b   r0
  1029.         and.b   #$07,r0
  1030.         eor.b   r1,r1
  1031.         bset.w  r0,r1
  1032. _42:    move.w  #16,r2
  1033. _30:    move.b  (r5.w){s1},r0
  1034.         move.b  r1,(r5.w){s1}
  1035.         addq.w  #80,r5
  1036.         dbf.w   r2,_30
  1037.         add.w   #20*80,r3
  1038.         dec.b   m1
  1039.         bne.b   _40
  1040.         subq.w  #3,r6
  1041.  
  1042.         bsr.w   maus_read
  1043.         eor.w   r3,r3
  1044.         or.b    r0,r0
  1045.         beq.b   _61
  1046.         dec.w   r3
  1047.         move.w  _500,r0
  1048.         br.b    _62
  1049.  
  1050. _61:    bsr.w   maus_on
  1051. _70:    bsr.w   maus_read
  1052.         tst.b   #3,r0
  1053.         beq.b   _70
  1054.         bsr.w   maus_off
  1055.         cmp.b   #2,r0
  1056.         beq.b   _101
  1057.  
  1058.         move.w  ypos,r0
  1059.         move.w  r0,_500
  1060. _62:    sub.w   ypos1,r0
  1061.         bmi.b   _100
  1062.         cmp.w   #64,r0
  1063.         bhs.b   _100
  1064.         move.b  #22,r1
  1065.         divu.b  r1,m0|r0
  1066.         eor.b   m0,m0
  1067.         move.w  color1,r5
  1068.         add.w   r5,r0
  1069.         lsl.w   #1,r5
  1070.         add.w   r0,r5
  1071.  
  1072.         move.w  xpos,r1
  1073.         sub.w   xpos1,r1
  1074.         bpl.b   _71
  1075.         or.w    r3,r3
  1076.         bne.b   _73
  1077.         cmp.w   #-10,r1
  1078.         blt.b   _100
  1079. _73:    eor.w   r1,r1
  1080. _71:    cmp.w   #128,r1
  1081.         blo.b   _72
  1082.         or.w    r3,r3
  1083.         bne.b   _74
  1084.         cmp.w   #128+10,r1
  1085.         bhs.b   _100
  1086. _74:    move.w  #127,r1
  1087. _72:    lsr.b   #1,r1
  1088.         move.b  r1,palette(r5.w)
  1089.         bsr.w   set_palette
  1090.         move.b  #1,color_changed
  1091.         br.w    _50
  1092. _100:   bclr.w  #0,sr
  1093.         rts.w
  1094. _101:   bset.w  #0,sr
  1095.         rts.w
  1096.  
  1097.  
  1098. _200:   move.w  #16,r2
  1099. _201:   move.l  r0,(r5.w){s1}
  1100.         move.l  r0,4.b(r5.w){s1}
  1101.         move.l  r0,8.b(r5.w){s1}
  1102.         move.l  r0,12.b(r5.w){s1}
  1103.         addq.w  #80,r5
  1104.         dbf.w   r2,_201
  1105.         rts.w
  1106. _500:   dc.w    0
  1107.  
  1108.  
  1109. get_dat:
  1110.         move.l  #'tad.',name2
  1111.         move.w  #$3d00,r0       ; Datei oeffnen
  1112.         move.w  #name,r1
  1113.         trap    #$21
  1114.         bcs.w   _100            ; Fehler? dann aufhoeren
  1115.         move.w  r0,r3           ; handle nach r3
  1116.  
  1117.         move.w  s3,r0
  1118.         move.w  r0,s0
  1119.         move.w  #$3f00,r0
  1120.         move.w  #640*480/8+62,r2       ; max  lesen
  1121.         eor.w   r1,r1
  1122.         trap    #$21
  1123.         move.w  r0,r1
  1124.  
  1125.         move.w  #$3e00,r0       ; Datei schliessen
  1126.         trap    #$21
  1127.  
  1128.         cmp.w   r2,r1
  1129.         beq.b   _55             ; Paintbrush Bitmap
  1130.         cmp.w   #640*480/8,r1
  1131.         beq.w   _50             ; nicht komprimierte Datei
  1132.  
  1133. _19:    eor.w   r5,r5
  1134.         eor.w   r6,r6
  1135.         eor.w   r1,r1
  1136.  
  1137.  
  1138.         move.w  #480/ycount,r3
  1139. _27:    move.b  #80,m0
  1140. _26:    move.w  #ycount,r2
  1141. _20:    dec.b   r1
  1142.         bpl.b   _21
  1143.         dec.b   m1
  1144.         bpl.b   _25
  1145.         move.b  (r5.w),r1
  1146.         inc.w   r5
  1147.         eor.b   r0,r0
  1148.         eor.b   m1,m1
  1149.         or.b    r1,r1
  1150.         bpl.b   _22
  1151.         and.b   #$7f,r1
  1152.         br.b    _21
  1153.  
  1154. _22:    move.b  r1,m1
  1155. _25:    eor.b   r1,r1
  1156.         move.b  (r5.w),r0
  1157.         inc.w   r5
  1158.  
  1159. _21:    move.b  r0,(r6.w){s2}
  1160.         add.w   #80,r6
  1161.         dbf.w   r2,_20
  1162.         sub.w   #ycount*80-1,r6
  1163.         dec.b   m0
  1164.         bne.b   _26
  1165.         add.w   #(ycount-1)*80,r6
  1166.         dec.w   r3
  1167.         bne.b   _27
  1168.         br.w    _60
  1169.  
  1170. _55:    move.w  #$3e,r5
  1171.         move.w  #480,r3
  1172.         move.w  #479*80,r6
  1173. _57:    move.w  #640/8/4,r2
  1174. _56:    move.l  (r5.w),r0       ;gelesene Daten direkt in bitmap
  1175.         addq.w  #4,r5
  1176.         not.l   r0
  1177.         move.l  r0,(r6.w){s2}
  1178.         addq.w  #4,r6
  1179.         dbf.w   r2,_56
  1180.         sub.w   #640/8*2,r6
  1181.         dec.w   r3
  1182.         bne.b   _57
  1183.         br.b    _58
  1184.  
  1185. _50:    eor.w   r5,r5
  1186.         move.w  #640*480/8/4,r2
  1187. _51:    move.l  (r5.w),r0       ;gelesene Daten direkt in bitmap
  1188.         move.l  r0,(r5.w){s2}
  1189.         addq.w  #4,r5
  1190.         dbf.w   r2,_51
  1191. _58:
  1192.  
  1193.         tst.b   #$ff,compri_flag{s6}
  1194.         beq.w   _60
  1195.         eor.w   r6,r6
  1196.         eor.w   r5,r5
  1197.  
  1198.         move.w  #480/ycount,r1          ; ycount Byte untereinander dann die
  1199. _72:    move.b  #80,m0                  ; naechsten ycount Byte daneben usw.
  1200. _71:    move.w  #ycount,r2
  1201. _70:    move.b  (r5.w){s2},r0
  1202.         add.w   #80,r5
  1203.         move.b  r0,(r6.w)
  1204.         inc.w   r6
  1205.         dbf.w   r2,_70
  1206.         sub.w   #ycount*80-1,r5
  1207.         dec.b   m0
  1208.         bne.b   _71
  1209.         add.w   #(ycount-1)*80,r5
  1210.         dec.w   r1
  1211.         bne.b   _72
  1212.  
  1213.         move.w  #640*480/8,r2
  1214.         eor.w   r5,r5
  1215. _79:    move.l  (r5.w),r0
  1216.         move.l  r0,(r5.w){s2}
  1217.         addq.w  #4,r5
  1218.         dbf.w   r2,_79
  1219.  
  1220.  
  1221.         move.w  #640*480/8,r2
  1222.         eor.w   r5,r5
  1223.         eor.w   r6,r6
  1224.  
  1225.         eor.b   r1,r1
  1226.         move.l  r5,r4
  1227.  
  1228. _c10:   bsr.w   _out_null       ;comprimieren
  1229. _c11:   cmp.w   #0,(r5.w){s2}
  1230.         beq.b   _c20
  1231.         inc.w   r5
  1232.         inc.b   r1
  1233.         cmp.b   #128,r1
  1234.         blo.b   _c12
  1235.         bsr.w   _out_muster
  1236. _c12:   dbf.w   r2,_c11
  1237.         bsr.w   _out_muster
  1238.         br.b    _59
  1239.  
  1240. _c20:   bsr.w   _out_muster
  1241. _c21:   cmp.b   #0,(r5.w){s2}
  1242.         bne.b   _c10
  1243.         inc.w   r5
  1244.         inc.b   r1
  1245.         cmp.b   #128,r1
  1246.         blo.b   _c22
  1247.         bsr.w   _out_null
  1248. _c22:   dbf.w   r2,_c21
  1249.         bsr.w   _out_null
  1250.         br.b    _59
  1251.  
  1252. _out_null:
  1253.         dec.b   r1
  1254.         bmi.b   _on2
  1255.         or.b    #$80,r1
  1256.         move.b  r1,(r6.w)
  1257.         inc.w   r6
  1258.         move.l  r5,r4
  1259. _on2:   eor.b   r1,r1
  1260.         rts.w
  1261.  
  1262. _out_muster:
  1263.         exg.l   r4,r5
  1264.         dec.b   r1
  1265.         bmi.b   _om2
  1266.         move.b  r1,(r6.w)
  1267.         inc.w   r6
  1268. _om1:   move.b  (r5.w){s2},r0
  1269.         inc.w   r5
  1270.         move.b  r0,(r6.w)
  1271.         inc.w   r6
  1272.         dec.b   r1
  1273.         bpl.b  _om1
  1274. _om2:   eor.b   r1,r1
  1275.         rts.w
  1276.  
  1277. _59:
  1278.         move.w  s6,r0
  1279.         move.w  r0,s0
  1280.         move.w  #$3c00,r0       ; Datei oeffnen
  1281.         move.w  #name,r1
  1282.         move.w  #0,r2
  1283.         trap    #$21
  1284.         bcs.w   _60             ; Fehler? dann eben nicht schreiben
  1285.         move.w  r0,r3           ; handle nach r3
  1286.  
  1287.         move.w  s3,r0
  1288.         move.w  r0,s0
  1289.         move.w  #$4000,r0
  1290.         eor.w   r1,r1
  1291.         move.w  r6,r2
  1292.         trap    #$21
  1293.  
  1294.         move.w  #$3e00,r0       ; Datei schliessen
  1295.         trap    #$21
  1296.         br.w    _19
  1297.  
  1298.  
  1299. _60:    move.w  s6,r1
  1300.         move.w  r1,s0
  1301.         bclr.w  #0,sr
  1302. _100:   rts.w
  1303.  
  1304.  
  1305. get_bild:
  1306.         bsr.w   get_dat
  1307.         bcs.w   _100
  1308.         eor.w   r5,r5
  1309.         move.w  #80*480/4,r2
  1310. _61:    not.l   (r5.w){s2}
  1311.  
  1312.         move.b  (r5.w){s2},r0
  1313.         move.b  3.b(r5.w){s2},m0
  1314.         move.b  m0,(r5.w){s2}
  1315.         move.b  r0,3.b(r5.w){s2}
  1316.         move.b  1.b(r5.w){s2},r0
  1317.         move.b  2.b(r5.w){s2},m0
  1318.         move.b  m0,1.b(r5.w){s2}
  1319.         move.b  r0,2.b(r5.w){s2}
  1320.  
  1321.         addq.w  #4,r5
  1322.         dbf.w   r2,_61
  1323.  
  1324.         move.b  #0,color_changed
  1325.         move.l  #'loc.',name2
  1326.         move.w  #$3d00,r0       ; Datei oeffnen
  1327.         move.w  #name,r1
  1328.         trap    #$21
  1329.         bcc.w   _b50            ; kein Fehler? dann weiter
  1330.         move.w  #0,fillcount
  1331.         move.w  #3*16/4,r2
  1332.         move.w  #palette_org,r5
  1333.         move.w  #palette,r6
  1334. _b10:   move.l  (r5.w),r0
  1335.         addq.w  #4,r5
  1336.         move.l  r0,(r6.w)
  1337.         addq.w  #4,r6
  1338.         dbf.w   r2,_b10
  1339.         bsr.w   set_palette
  1340.         br.b    _b20
  1341.  
  1342. _b50:   move.w  r0,r3           ; handle nach r3
  1343.         move.w  #$3f00,r0
  1344.         move.w  #3*16+2+512*4,r2       ; max  lesen
  1345.         move.w  #palette,r1
  1346.         trap    #$21
  1347.  
  1348.         move.w  #$3e00,r0       ; Datei schliessen
  1349.         trap    #$21
  1350.  
  1351.         bsr.w   set_palette
  1352.  
  1353.         move.w  #fillbuff,r5
  1354.         move.w  fillcount,r2
  1355.         or.w    r2,r2
  1356.         beq.b   _b20
  1357.  
  1358.         move.w  r2,r0
  1359.         lsl.w   #2,r0
  1360.         move.w  r5,r6
  1361.         add.w   r0,r5
  1362.         add.w   r0,r6
  1363.         add.w   r2,r6
  1364.         add.w   r2,r6
  1365.  
  1366. _b30:   subq.w  #4,r5
  1367.         subq.w  #6,r6
  1368.         move.l  (r5.w),r0
  1369.         move.w  r0,r1
  1370.         and.w   #$0fff,r1
  1371.         move.w  r1,(r6.w)
  1372.         lsr.l   #8,r0
  1373.         lsr.w   #4,r0
  1374.         move.w  r0,2.b(r6.w)
  1375.         eor.w   r0,r0
  1376.         rol.l   #12,r0
  1377.         lsl.w   #4,r0
  1378.         rol.l   #4,r0
  1379.         move.w  r0,4.b(r6.w)
  1380.         dbf.w   r2,_b30
  1381.  
  1382. _b20:   bsr.w   black_screen
  1383.         bsr.w   fill_all
  1384.         move.b  #-1,auto_color
  1385.         move.w  #1,color1
  1386.         move.w  #1,color2
  1387.         bclr.w  #0,sr
  1388. _100:   rts.w
  1389.  
  1390.  
  1391. fill_all:
  1392.         cmp.b   #$7f,3{s2}
  1393.         bne.b   _00
  1394.         bsr.w   hintergrund_halb
  1395. _00:    cmp.b   #$bf,3{s2}
  1396.         bne.b   _01
  1397.         bsr.w   hintergrund
  1398. _01:    move.w  r0,-(sp)
  1399.         move.w  r2,-(sp)
  1400.         move.w  r5,-(sp)
  1401.  
  1402.         move.w  #fillbuff,r5
  1403.         move.w  fillcount,r2
  1404.         or.w    r2,r2
  1405.         beq.b   _100
  1406.  
  1407. _10:    move.w  (r5.w),r0
  1408.         move.w  r0,xpos
  1409.         move.w  2.b(r5.w),r0
  1410.         move.w  r0,ypos
  1411.         move.w  4.b(r5.w),r0
  1412.  
  1413.  
  1414.         move.b  r0,color1
  1415.         move.b  m0,color2
  1416.         addq.w  #6,r5
  1417.         bsr.w   fill
  1418.         bsr.w   read_if_ch
  1419.         beq.b   _20
  1420.         cmp.b   #$49,m0
  1421.         beq.b   _100
  1422.         cmp.b   #$51,m0
  1423.         beq.b   _100
  1424.         cmp.b   #27,r0
  1425.         beq.b   _100
  1426.         bsr.w   read_ch
  1427. _20:    dbf.w   r2,_10
  1428.  
  1429. _100:   move.w  (sp)+,r5
  1430.         move.w  (sp)+,r2
  1431.         move.w  (sp)+,r0
  1432.         rts.w
  1433.  
  1434. put_color:
  1435.         tst.b   #$ff,color_changed
  1436.         beq.b   _101
  1437.         movem.w r0-r7,-(sp)
  1438.  
  1439.         move.w  #fillbuff,r5
  1440.         move.w  fillcount,r2
  1441.         or.w    r2,r2
  1442.         beq.b   _20
  1443.         move.w  r5,r6
  1444.  
  1445. _30:    move.l  2.b(r5.w),r0
  1446.         rol.l   #12,r0
  1447.         lsr.b   #4,r0
  1448.         ror.l   #12,r0
  1449.         lsl.w   #4,r0
  1450.         lsl.l   #8,r0
  1451.         add.w   (r5.w),r0
  1452.         move.l  r0,(r6.w)
  1453.         addq.w  #6,r5
  1454.         addq.w  #4,r6
  1455.         dbf.w   r2,_30
  1456.  
  1457.  
  1458. _20:    move.w  #$3c00,r0       ; Datei oeffnen
  1459.         move.w  #name,r1
  1460.         move.w  #0,r2
  1461.         trap    #$21
  1462.         bcs.w   _100            ; Fehler? dann aufhoeren
  1463.         move.w  r0,r3           ; handle nach r3
  1464.  
  1465.         move.w  #$4000,r0
  1466.         move.w  fillcount,r2
  1467.         lsl.w   #2,r2
  1468.         add.w   #2+16*3,r2
  1469.         move.w  #palette,r1
  1470.         trap    #$21
  1471.  
  1472.         move.w  #$3e00,r0       ; Datei schliessen
  1473.         trap    #$21
  1474.  
  1475. _100:   movem.w (sp)+,r0-r7
  1476. _101:   rts.w
  1477.  
  1478.  
  1479.         
  1480. eingabe:
  1481.         bsr.w   read_ch
  1482.  
  1483.         cmp.b   #' ',r0
  1484.         beq.w   __00
  1485.         cmp.b   #$49,m0 ; naechstes Bild
  1486.         beq.b   _n00
  1487.         cmp.b   #$51,m0 ; vorheriges Bild
  1488.         beq.b   _v00
  1489.         cmp.b   #$52,m0 ; EINFG
  1490.         beq.w   _ein
  1491.         cmp.b   #$53,m0 ; DEL
  1492.         beq.w   _del
  1493.         cmp.b   #$11,m0 ; w
  1494.         beq.w   _w00
  1495.         cmp.b   #$47,m0 ; POS1
  1496.         beq.w   _uebersicht
  1497.  
  1498.         cmp.b   #$19,m0 ; p
  1499.         bne.b   _100
  1500.         bsr.w   hardcopy
  1501.  
  1502. _100:   rts.w
  1503.  
  1504.  
  1505. __00:   bsr.w   hintergrund
  1506.         bsr.w   fill_all
  1507.         br.w    _100
  1508. _n00:   bsr.w   put_color
  1509. _n01:   inc.b   name1+1
  1510.         cmp.b   #'9',name1+1
  1511.         bls.b   _n10
  1512.         move.b  #'0',name1+1
  1513.         inc.b   name1
  1514.         cmp.b   #'9',name1
  1515.         bls.b   _n10
  1516.         move.b  #'0',name1
  1517. _n10:   bsr.w   get_bild
  1518.         bcs.b   _n01
  1519.         br.b    _100
  1520.  
  1521. _v00:   bsr.w   put_color
  1522. _v01:   dec.b   name1+1
  1523.         cmp.b   #'0',name1+1
  1524.         bhs.b   _v10
  1525.         move.b  #'9',name1+1
  1526.         dec.b   name1
  1527.         cmp.b   #'0',name1
  1528.         bhs.b   _v10
  1529.         move.b  #'9',name1
  1530. _v10:   bsr.w   get_bild
  1531.         bcs.b   _v01
  1532.         br.b    _100
  1533.  
  1534. _w00:   bsr.w   put_color
  1535.         move.b  #1,compri_flag
  1536.         bsr.w   get_bild
  1537.         move.b  #0,compri_flag
  1538.         br.b    _100
  1539.  
  1540. _ein:   bsr.w   get_bild
  1541.         br.b    _100
  1542.  
  1543. _del:   move.w  #0,fillcount
  1544.         bsr.w   black_screen
  1545.         bsr.w   fill_all
  1546.         move.b  #1,color_changed
  1547.         br.w    _100
  1548.  
  1549.  
  1550. _uebersicht:
  1551.         bsr.w   put_color
  1552.         bsr.w   white_screen
  1553.         bsr.w   black_gitter
  1554.         bsr.w   set_grau_palette
  1555.         move.w  #'00',name1
  1556.         br.w    _u61
  1557.  
  1558. _u60:   bsr.w   read_if_ch
  1559.         beq.b   _u64
  1560.         bsr.w   read_ch
  1561.         cmp.b   #27,r0
  1562.         bne.b   _u60
  1563.         br.w    _n10
  1564.         
  1565. _u64:   inc.b   name1+1
  1566.         cmp.b   #'9',name1+1
  1567.         bls.b   _u61
  1568.         move.b  #'0',name1+1
  1569.         inc.b   name1
  1570.         cmp.b   #'9',name1
  1571.         bls.b   _u61
  1572.         move.b  #'0',name1
  1573.         bsr.w   maus_on
  1574.  
  1575. _u70:   bsr.w   read_if_ch
  1576.         beq.b   _u74
  1577.         bsr.w   read_ch
  1578.         cmp.b   #$19,m0 ; p
  1579.         bne.b   _u79
  1580.         bsr.w   maus_off
  1581.         bsr.w   hardcopy
  1582.         bsr.w   maus_on
  1583.         br.b    _u70
  1584. _u79:   cmp.b   #27,r0
  1585.         bne.w   _u70
  1586.         bsr.w   maus_off
  1587.         br.w    _n10
  1588.  
  1589. _u74:   bsr.w   maus_read
  1590.         tst.b   #1,r0
  1591.         beq.b   _u70
  1592.         bsr.w    maus_off
  1593.         move.w  ypos,r0
  1594.         move.b  #48,r1
  1595.         divs.b  r1,m0|r0
  1596.         cmp.b   #9,r0
  1597.         bls.b   _u71
  1598.         move.b  #9,r0
  1599. _u71:   add.b   #'0',r0
  1600.         move.b  r0,name1
  1601.  
  1602.         move.w  xpos,r0
  1603.         move.b  #64,r1
  1604.         divs.b  r1,m0|r0
  1605.         cmp.b   #9,r0
  1606.         bls.b   _u72
  1607.         move.b  #9,r0
  1608. _u72:   add.b   #'0',r0
  1609.         move.b  r0,name1+1
  1610. _u73:   bsr.w   maus_read
  1611.         tst.b   #3,r0
  1612.         bne.b   _u73
  1613.         br.w    _n10
  1614.  
  1615. _u61:   bsr.w   get_dat
  1616.         bcs.w   _u60
  1617.         
  1618.         eor.w   r6,r6
  1619.         move.w  #64*48/4,r2
  1620.         eor.l   r0,r0
  1621. _u5:    move.l  r0,(r6.w){s3}
  1622.         addq.l  #4,r6
  1623.         dbf.w   r2,_u5        
  1624.  
  1625.         lea.w   bit_tab,r3
  1626.         eor.w   r5,r5
  1627.         eor.w   r6,r6
  1628.  
  1629.         move.w  #48,r1
  1630. _u30:   move.w  #10,r4
  1631. _u20:   move.w  #16,r2
  1632.  
  1633. _u10:   move.b  (r5.w){s2},r0
  1634.         lsr.b   #3,r0
  1635.         move.b  (r3.w,r0.b),r0
  1636.         add.b   r0,(r6.w){s3}
  1637.         move.w  (r5.w){s2},r0
  1638.         exg.b   r0,m0
  1639.         lsr.w   #6,r0
  1640.         and.b   #$1f,r0
  1641.         move.b  (r3.w,r0.b),r0
  1642.         add.b   r0,(r6.w){s3}
  1643.         inc.w   r5
  1644.         inc.w   r6
  1645.  
  1646.         move.b  (r5.w){s2},r0
  1647.         lsr.b   #1,r0
  1648.         and.b   #$1f,r0
  1649.         move.b  (r3.w,r0.b),r0
  1650.         add.b   r0,(r6.w){s3}
  1651.         move.w  (r5.w){s2},r0
  1652.         exg.b   r0,m0
  1653.         lsr.w   #4,r0
  1654.         and.b   #$1f,r0
  1655.         move.b  (r3.w,r0.b),r0
  1656.         add.b   r0,(r6.w){s3}
  1657.         inc.w   r5
  1658.         inc.w   r6
  1659.  
  1660.         move.w  (r5.w){s2},r0
  1661.         exg.b   r0,m0
  1662.         lsr.w   #7,r0
  1663.         and.b   #$1f,r0
  1664.         move.b  (r3.w,r0.b),r0
  1665.         add.b   r0,(r6.w){s3}
  1666.         inc.w   r5
  1667.         move.b  (r5.w){s2},r0
  1668.         lsr.b   #2,r0
  1669.         and.b   #$1f,r0
  1670.         move.b  (r3.w,r0.b),r0
  1671.         add.b   r0,(r6.w){s3}
  1672.         inc.w   r6
  1673.  
  1674.         move.w  (r5.w){s2},r0
  1675.         exg.b   r0,m0
  1676.         lsr.w   #5,r0
  1677.         and.b   #$1f,r0
  1678.         move.b  (r3.w,r0.b),r0
  1679.         add.b   r0,(r6.w){s3}
  1680.         inc.w   r5
  1681.         move.b  (r5.w){s2},r0
  1682.         and.b   #$1f,r0
  1683.         move.b  (r3.w,r0.b),r0
  1684.         add.b   r0,(r6.w){s3}
  1685.         inc.w   r5
  1686.         inc.w   r6
  1687.         dbf.w   r2,_u10
  1688.  
  1689.         subq.w  #64,r6        
  1690.         dec.w   r4
  1691.         bne.b   _u20
  1692.         addq.w  #64,r6
  1693.         dec.w   r1
  1694.         bne.w   _u30
  1695.  
  1696. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1697.  
  1698.         eor.l   r4,r4
  1699.         eor.w   r5,r5
  1700.         eor.l   r3,r3
  1701.         move.w  #64*48,r2
  1702.         eor.l   r0,r0
  1703. _u81:   move.b  (r5.w){s3},r0
  1704.         inc.w   r5
  1705.         cmp.b   #6,r0
  1706.         bls.b   _u86
  1707.         add.l   r0,r3
  1708.         inc.w   r4
  1709. _u86:   dbf.w   r2,_u81
  1710.         inc.l   r3
  1711.         inc.l   r4
  1712.         mulsq.l #10,r4,r4
  1713.  
  1714.         eor.w   r5,r5
  1715.         move.w  #64*48,r2
  1716.  
  1717. _u82:   eor.l   r0,r0
  1718.         eor.l   r1,r1
  1719.         move.b  (r5.w){s3},r0
  1720.         muls.l  r4,r0,r0
  1721.         divu.l  r3,r1|r0
  1722.         cmpq.l  #15,r0
  1723.         bls.b   _u85
  1724.         move.b  #15,r0
  1725. _u85:   move.b  r0,(r5.w){s3}        
  1726.         inc.w   r5
  1727.         dbf.w   r2,_u82
  1728.  
  1729.         
  1730.         eor.w   r0,r0
  1731.         move.b  name1,r0
  1732.         sub.b   #'0',r0
  1733.         move.w  #80*48,r1
  1734.         mulu.w  r1,r0,r1|r0
  1735.         move.w  r0,r6
  1736.         
  1737.         eor.w   r0,r0
  1738.         move.b  name1+1,r0
  1739.         sub.b   #'0',r0
  1740.         lsl.w   #3,r0
  1741.         add.w   r0,r6
  1742.  
  1743.         move.w  #$3ce,r1
  1744. ;        move.b  #$80,r3         ; nur falls ohne Rand
  1745.         eor.w   r5,r5
  1746.         
  1747.         move.w  #47,r4          ; 48 falls ohne Rand
  1748. _u52:   move.w  #63,r2          ; 64 falls ohne Rand
  1749.         move.b  #$80,r3         ; nur falls mit Rand
  1750. _u51:   move.b  (r5.w){s3},m0
  1751.         inc.w   r5
  1752.         eor.b   #$0f,m0
  1753.         eor.b   r0,r0
  1754.         out.w   r0,r1
  1755.  
  1756.         move.b  (r6.w){s1},r0
  1757.         move.b  r3,(r6.w){s1}
  1758.         ror.b   #1,r3
  1759.         cmp.b   #$80,r3
  1760.         bne.b   _u53
  1761.         inc.w   r6
  1762. _u53:   dbf.w   r2,_u51
  1763.         inc.w   r5              ; nur falls mit Rand
  1764.         add.w   #80-7,r6        ; 80-8 falls ohne Rand
  1765.         dec.w   r4
  1766.         bne.b   _u52    
  1767.         br.w    _u60
  1768.  
  1769.  
  1770.  
  1771. bit_tab:dc.b    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
  1772.         dc.b    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5
  1773.  
  1774.  
  1775.  
  1776. meld1:  dc.b    ' : Pruefsummenfehler',0
  1777. meld2:  dc.b    'Nicht genuegend Speicher',0
  1778. meld3:  dc.b    'bild00.dat nicht gefunden',0
  1779.  
  1780. main:
  1781.         move.w  #$100,r5
  1782.         move.w  #checksum,r6
  1783.         eor.l   r0,r0
  1784. _5:     add.l   (r5.w),r0
  1785.         addq.l  #4,r5
  1786.         cmp.w   r6,r5
  1787.         bls.b   _5
  1788.         or.l    r0,r0
  1789.         beq.b   _6
  1790.  
  1791. if 1
  1792.         neg.l   r0
  1793.         bsr.w   print_hex_l
  1794.         move.w  #meld1,r0
  1795.         bsr.w   print_string
  1796.         br.w    ende
  1797. endif
  1798.  
  1799. _6:     move.w  #$40,r0
  1800.         move.w  r0,s1
  1801.         move.w  8{s1},r0        ; verwende LPT1:
  1802.         move.w  r0,LPT_DAT
  1803.         inc.w   r0
  1804.         move.w  r0,LPT_STAT
  1805.         inc.w   r0
  1806.         move.w  r0,LPT_COMM
  1807.         
  1808.         move.w  #$80,r5
  1809.         move.b  (r5.w),r0
  1810. _12:    cmp.w   #'m-',(r5.w)
  1811.         beq.b   _11
  1812.         cmp.w   #'c-',(r5.w)
  1813.         beq.b   _14        
  1814.         cmp.w   #'2-',(r5.w)
  1815.         beq.b   _18        
  1816. _19:    inc.w   r5
  1817.         dec.b   r0
  1818.         bpl.b   _12
  1819.         br.b    _13
  1820. _18:    move.w  10{s1},r0        ; verwende LPT2:
  1821.         move.w  r0,LPT_DAT
  1822.         inc.w   r0
  1823.         move.w  r0,LPT_STAT
  1824.         inc.w   r0
  1825.         move.w  r0,LPT_COMM
  1826.         br.b    _19
  1827. _11:    move.b  #0,.no_change_color+2
  1828. _14:    move.b  #255,.no_mix_color+4
  1829.         br.b    _19
  1830. _13:    move.w  #$a000,r0
  1831.         move.w  r0,s1
  1832.         move.w  s0,r0
  1833.         add.w   #$1000,r0
  1834.         move.w  r0,s2
  1835.         add.w   #$1000,r0
  1836.         move.w  r0,s3           ; Daten hinter Codesegment
  1837.         add.w   #$1000,r0
  1838.         cmp.w   2.w,r0          ; Speicherende aus dem PSP
  1839.         blo.b   _7
  1840.         move.w  #meld2,r0
  1841.         bsr.w   print_string
  1842.         br.w    ende
  1843.                                 ; s1 Bildspeicher
  1844.                                 ; s2 Bild
  1845.                                 ; s3 Fill-Puffer
  1846. _7:     bsr.w   init_graph
  1847.         bsr.w   maus_init
  1848.  
  1849.         bsr.w   get_bild
  1850.         bcc.b   _8
  1851.         move.w  #$03,r0
  1852.         trap    #$10
  1853.         move.w  #meld3,r0
  1854.         bsr.w   print_string
  1855.         br.w    ende
  1856.  
  1857. _8:     move.w  #1,color1
  1858.         move.w  #1,color2
  1859.         bsr.w   maus_on
  1860.  
  1861. _10:    bsr.w   maus_read
  1862.         tst.b   #$01,r0
  1863.         beq.b   _31
  1864.  
  1865.         bsr.w   maus_off
  1866.         bsr.w   fill
  1867.         move.b  #1,color_changed
  1868.         tst.b   #$ff,auto_color
  1869.         beq.b   _39
  1870.         move.w  color1,r0
  1871. _21:    add.b   #5,r0
  1872.         and.w    #$000f,r0
  1873.         beq.b   _21
  1874.         cmp.b   #15,r0
  1875.         beq.b   _21
  1876.         move.w  r0,color1
  1877.         move.w  r0,color2
  1878.         br.b    _39
  1879.  
  1880. _31:    tst.b   #$02,r0
  1881.         beq.b   _30
  1882.         bsr.w   maus_off
  1883.         bsr.w   new_color
  1884. _39:    bsr.w   maus_read
  1885.         or.b    r0,r0
  1886.         bne.b   _39
  1887.         bsr.w   maus_on
  1888.  
  1889. _30:    bsr.w   read_if_ch
  1890.         beq.w   _10
  1891.         cmp.b   #27,r0
  1892.         beq.w   _100
  1893.         bsr.w   maus_off
  1894.         bsr.w   eingabe
  1895.         bsr.w   maus_on
  1896.         br.w    _10
  1897.  
  1898. _99:    bsr.w   read_ch
  1899. _100:   bsr.w   put_color
  1900.         ; Textmode
  1901.         move.w  #$03,r0
  1902.         trap    #$10
  1903.  
  1904.         br.w    ende
  1905.  
  1906. even4
  1907. xpos:   dc.l    0
  1908. ypos:   dc.l    0
  1909. xpos1:  dc.l    0
  1910. ypos1:  dc.l    0
  1911. color:  dc.w    0
  1912. color1: dc.w    0
  1913. color2: dc.w    0
  1914. auto_color:     dc.w    $00ff
  1915. color_changed:  dc.b    0
  1916. compri_flag:    dc.b    0
  1917. name:   dc.b    'bild'
  1918. name1:  dc.b    '00'
  1919. name2:  dc.b    '.dat',0
  1920.  
  1921. palette_org:
  1922.         dc.b    00,00,00, 63,00,00, 63,21,00, 63,31,15
  1923.         dc.b    63,37,00, 63,42,00, 00,63,00, 00,63,31
  1924.         dc.b    42,63,00, 00,15,63, 00,38,63, 37,63,63
  1925.         dc.b    42,42,63, 63,63,00, 47,51,22, 63,63,63
  1926.  
  1927. palette_grau:
  1928.         dc.b    00,00,00, 04,04,04, 08,08,08, 12,12,12
  1929.         dc.b    16,16,16, 20,20,20, 24,24,24, 28,28,28
  1930.         dc.b    32,32,32, 36,36,36, 40,40,40, 44,44,44
  1931.         dc.b    48,48,48, 52,52,52, 56,56,56, 63,63,63
  1932.  
  1933.  
  1934.  
  1935. ;**************************************************************************
  1936. ;*                                                                        *
  1937. ;*          Hardcopy VGA 640x480  16 Farben                               *
  1938. ;*                                                                        *
  1939. ;**************************************************************************
  1940.  
  1941.  
  1942.         LPT=0       ; 0 fuer Adresse $3bc  (falls vorhanden LPT1:)  
  1943.                     ; 1 fuer Adresse $378  (meist LPT1:) 
  1944.                     ; 2 fuer Adresse $278  (meist LPT2:) 
  1945.  
  1946.         CONTRAST=1  ; 0 fuer Orginalhelligkeit
  1947.                     ; 1 fuer Kontrastverstaerkung und Aufhellung
  1948.  
  1949.  
  1950. hardcopy:   
  1951.         movem.l r0-r7,-(sp)
  1952.         move.w  s0,-(sp)
  1953.         move.w  s1,-(sp)
  1954.         move.w  s6,r0
  1955.         move.w  r0,s0
  1956.         move.w  #$a000,r0
  1957.         move.w  r0,s1
  1958.  
  1959.         move.w  #$3c6,r1        ; Video DAC Pixel Mask Register
  1960.         in.b    r1,r0
  1961.         move.b  r0,r2
  1962.         move.w  #$00ff,r3
  1963.  
  1964. _20:    move.b  r3,r0
  1965.         and.b   r2,r0
  1966.         move.w  #$3c7,r1        ; Video DAC Pixel Address (Read Mode)
  1967.         out.b   r0,r1
  1968.         move.w  #$3c9,r1        ; Video DAC Pixel Data Register
  1969.         bsr.w   wait
  1970.         in.b    r1,r0           ; rot
  1971.         and.w   #$3f,r0
  1972.         mulsq.w #39,r0,r4       ; 39/130 (0.30)
  1973.         bsr.w   wait
  1974.         in.b    r1,r0           ; gruen
  1975.         and.w   #$3f,r0
  1976.         mulsq.w #77,r0,r0       ; 77/130 (0.59)
  1977.         add.w   r0,r4
  1978.         bsr.w   wait
  1979.         in.b    r1,r0           ; blau
  1980.         and.w   #$3f,r0
  1981.         mulsq.w #14,r0,r0       ; 14/130 (0.11)
  1982.         add.w   r4,r0
  1983.         lsr.w   #5,r0
  1984.         move.b  r0,tab(r3.w)
  1985.         dec.w   r3
  1986.         bpl.b   _20
  1987.  
  1988.         move.b  tab+20,r0
  1989.         move.b  r0,tab+6
  1990.         move.b  tab+56,r0
  1991.         move.b  r0,tab+8
  1992.         move.b  tab+57,r0
  1993.         move.b  r0,tab+9
  1994.         move.b  tab+58,r0
  1995.         move.b  r0,tab+10
  1996.         move.b  tab+59,r0
  1997.         move.b  r0,tab+11
  1998.         move.b  tab+60,r0
  1999.         move.b  r0,tab+12
  2000.         move.b  tab+61,r0
  2001.         move.b  r0,tab+13
  2002.         move.b  tab+62,r0
  2003.         move.b  r0,tab+14
  2004.         move.b  tab+63,r0
  2005.         move.b  r0,tab+15
  2006.         
  2007.  
  2008.         IF CONTRAST
  2009.         ; hoechste und niedrigste Helligkeit berechnen
  2010.         move.w  #$00ff,r3
  2011.         move.w  r3,r1           ; min
  2012.         eor.w   r2,r2           ; max
  2013. _50:    move.b  tab(r3.w),r0
  2014.         cmp.b   r1,r0
  2015.         bhs.b   _51
  2016.         move.b  r0,r1           ; min
  2017. _51:    cmp.b   r2,r0
  2018.         bls.b   _52
  2019.         move.b  r0,r2           ; max
  2020. _52:    dec.w   r3
  2021.         bpl.b   _50
  2022.         move.w  r1,r5           ; xmin
  2023.         sub.b   r1,r2           ; max-min
  2024.         beq.b   _70
  2025.  
  2026.         ; Kontrast erhoehen
  2027.         move.w  #$00ff,r3
  2028.         move.w  r3,r4
  2029. _53:    movu.bw tab(r3.w),r0
  2030.         sub.w   r5,r0
  2031.         muls.w  r4,r0,r1|r0
  2032.         divs.w  r2,r1|r0
  2033.         move.b  r0,tab(r3.w)    ; 255*(x-xmin) / (xmax-xmin)
  2034.         dec.w   r3
  2035.         bpl.b   _53
  2036.  
  2037.         ; mittlere Helligkeit des Bildes berechnen
  2038.         move.w  #tab,r3
  2039.         move.w  #320*200,r2
  2040.         eor.l   r0,r0
  2041.         eor.l   r4,r4
  2042.         eor.w   r5,r5
  2043. _54:    move.b  (r5.w){s1},r0
  2044.         inc.w   r5
  2045.         move.b  (r3.w,r0.b),r0
  2046.         add.l   r0,r4
  2047.         dbf.w   r2,_54
  2048.         cmp.l   #320*200*128,r4 ; Bild hell genug?
  2049.         bhi.b   _70
  2050.  
  2051.         ; Helligkeit erhoehen
  2052.         move.w  #$00ff,r3
  2053.         move.w  r3,r2
  2054. _55:    movu.bw tab(r3.w),r0
  2055.         move.w  #510,r1
  2056.         sub.w   r0,r1
  2057.         muls.w  r1,r0,r1|r0
  2058.         divs.w  r2,r1|r0
  2059.         move.b  r0,tab(r3.w)    ; x*(510-x)/255
  2060.         dec.w   r3
  2061.         bpl.b   _55
  2062. _70:
  2063.         ENDIF
  2064.         
  2065.         move.b  #1,plot_ok
  2066.         move.l  #ps_ini,r1
  2067.         bsr.w   plot_string
  2068.  
  2069.         move.w  #tab,r3
  2070.         move.l  #640*480,r2
  2071.         eor.l   r5,r5
  2072. _30:    bsr.w   get_color
  2073.         inc.l   r5
  2074.         move.b  (r3.w,r0.b),r0
  2075.         bsr.w   plot_hex_byte
  2076.         tst.b   #$ff,plot_ok
  2077.         beq.b   _40             ; Timeout
  2078.         dbf.l   r2,_30
  2079.  
  2080.         move.l  #ps_end,r1
  2081.         bsr.w   plot_string
  2082.  
  2083. _40:    move.w  (sp)+,s1
  2084.         move.w  (sp)+,s0
  2085.         movem.l (sp)+,r0-r7
  2086.         rts.w
  2087.  
  2088. get_color:
  2089.         move.w  r2,-(sp)
  2090.         move.w  r3,-(sp)
  2091.         move.l  r5,-(sp)
  2092.  
  2093.         move.l  r5,r6
  2094.         lsr.l   #3,r6
  2095.         and.w   #7,r5
  2096.         eor.w   #7,r5
  2097.         eor.w   r4,r4
  2098.         move.w  #$3ce,r1        ; Graphics Controller Index Register
  2099.  
  2100.         move.w  #$0304,r0       ; Register 4 (Read Plane Select) = 3
  2101.         move.w  #4,r2
  2102. _20:    out.w   r0,r1
  2103.         move.b  (r6.w){s1},r3
  2104.         add.w   r4,r4
  2105.         btst.w  r5,r3
  2106.         bcc.b   _10
  2107.         inc.w   r4
  2108. _10:    sub.w   #$0100,r0
  2109.         dbf.w   r2,_20
  2110.         move.w  r4,r0
  2111.  
  2112.         move.l  (sp)+,r5
  2113.         move.w  (sp)+,r3
  2114.         move.w  (sp)+,r2
  2115.         rts.w
  2116.  
  2117.  
  2118. wait:   move.w  r2,-(sp)
  2119.         move.w  #100,r2
  2120. _10:    dbf.w   r2,_10
  2121.         move.w  (sp)+,r2
  2122.         rts.w
  2123.         
  2124. ps_ini:
  2125. dc.b    04
  2126. dc.b    ' /zeile 640 string def'
  2127. dc.b    ' 585 30 translate'; x-Richtung: 1 Bildpunkt = 5 Laserpunkte
  2128. dc.b    ' 90 rotate'       ; y-Richtung: 1 Bildpunkt = 5 Laserpunkte
  2129. dc.b    ' 768 576 scale'   ; (640*72/300)*5 , (480*72/300)*5
  2130. dc.b    ' 640 480 8 [640 0 0 -480 0 480]'
  2131. dc.b    ' {currentfile zeile readhexstring pop }'
  2132. dc.b    ' image '
  2133. dc.b    0
  2134.  
  2135. ps_end:
  2136. dc.b    ' showpage ',04,0
  2137.  
  2138. LPT_DAT: dc.w   $3bc
  2139. LPT_STAT:dc.w   $3bd
  2140. LPT_COMM:dc.w   $3be
  2141.  
  2142. plot_ok: dc.b  0
  2143.  
  2144. plot_ch:
  2145.  
  2146.         ; gibt Zeichen in r0.b an Drucker aus
  2147.         ; Eingabe:  r0.b  : auszugebendes Zeichen
  2148.         ; Ausgabe:  keine
  2149.         ; veraenderte Register: keine
  2150.  
  2151.         tst.b   #$ff,plot_ok
  2152.         beq.b   _102
  2153.  
  2154.         move.w  r0,-(sp)
  2155.         move.w  r1,-(sp)
  2156.         move.l  r2,-(sp)
  2157.         move.b  r0,m0
  2158.  
  2159.         move.l  #$10000000,r2
  2160.         move.w  LPT_STAT,r1
  2161. _10:    in.b    r1,r0
  2162.         tst.b   #$80,r0         ; BUSY
  2163.         dbne.l  r2,_10
  2164.         beq.b   _100            ; timeout
  2165.  
  2166.         move.b  m0,r0
  2167.         move.w  LPT_DAT,r1
  2168.         out.b   r0,r1           ; Datenbyte
  2169.  
  2170.         move.w  LPT_COMM,r1
  2171.         in.b    r1,r0
  2172.         move.b  r0,m0
  2173.         move.b  #$0f,r0
  2174.         out.b   r0,r1           ; STROBE aktiv
  2175.         move.w  #10,r2
  2176. _11:    dbf.w   r2,_11
  2177.         move.b  #$0e,r0
  2178.         out.b   r0,r1           ; STROBE inaktiv
  2179.  
  2180.         move.l  #$10000000,r2
  2181.         move.w  LPT_STAT,r1
  2182. _20:    in.b    r1,r0
  2183.         tst.b   #$80,r0         ; BUSY
  2184.         dbne.l  r2,_20
  2185.         bne.b   _30
  2186.         move.b  #0,plot_ok     ; timeout
  2187.  
  2188. _30:    move.b  #$ff,r0
  2189.         move.w  LPT_DAT,r1
  2190.         out.b   r0,r1           ; Datenleitungen high
  2191.  
  2192.         move.b  m0,r0
  2193.         move.w  LPT_COMM,r1
  2194.         out.b   r0,r1
  2195.         br.b    _101
  2196.  
  2197. _100:   move.b  #0,plot_ok
  2198. _101:   move.l  (sp)+,r2
  2199.         move.w  (sp)+,r1
  2200.         move.w  (sp)+,r0
  2201. _102:   rts.w
  2202.  
  2203.  
  2204. plot_string:
  2205.         ; gibt String (mit 0 abgeschlossen) an Drucker aus
  2206.         ; Eingabe:  r1.l{s0}  : Zeiger auf String
  2207.         ; Ausgabe:  keine
  2208.         ; veraenderte Register: keine
  2209.  
  2210.         move.w  r0,-(sp)
  2211.         move.l  r1,-(sp)
  2212.  
  2213. _20:    move.b  (r1),r0
  2214.         inc.w   r1
  2215.         tst.b   r0,r0
  2216.         beq.b   _10
  2217.         bsr.w   plot_ch
  2218.         br.b    _20
  2219. _10:    move.l  (sp)+,r1
  2220.         move.w  (sp)+,r0
  2221.         rts.w
  2222.  
  2223.  
  2224. plot_hex_byte: 
  2225.         ; gibt Byte in Hexform an Drucker aus
  2226.         ; Eingabe:  r0.b  : auszugebendes Byte
  2227.         ; Ausgabe:  keine
  2228.         ; veraenderte Register: keine
  2229.  
  2230.         move.w  r0,-(sp)
  2231.         move.b  r0,m0
  2232.  
  2233.         lsr.b   #4,r0
  2234.         add.b   #'0',r0
  2235.         cmp.b   #'9',r0
  2236.         bls.b   _10
  2237.         add.b   #'a'-'0'-10,r0
  2238. _10:    bsr.w   plot_ch
  2239.  
  2240.         move.b  m0,r0
  2241.         and.b   #$0f,r0
  2242.         add.b   #'0',r0
  2243.         cmp.b   #'9',r0
  2244.         bls.b   _20
  2245.         add.b   #'a'-'0'-10,r0
  2246. _20:    bsr.w   plot_ch
  2247.  
  2248.         move.b  #13,r0
  2249.         bsr.w   plot_ch
  2250.         move.b  #10,r0
  2251.         bsr.w   plot_ch
  2252.  
  2253.         move.w  (sp)+,r0
  2254.         rts.w
  2255.  
  2256.  
  2257.  
  2258. ;**************************************************************************
  2259. ;*                                                                        *
  2260. ;*     Ende      Hardcopy VGA 640x480  16 Farben                          *
  2261. ;*                                                                        *
  2262. ;**************************************************************************
  2263.  
  2264.  
  2265.  
  2266. even4
  2267. checksum:       dc.l    $65022674       ; muss am Ende des Codes stehen
  2268.  
  2269. palette:        blk.b   3*16
  2270. fillcount:      blk.w   1
  2271. fillbuff:       blk.w   512*6
  2272. bild_save:      blk.b   4*4*32*4*4
  2273. tab:            blk.b   256     ; hier 256 Byte fuer Helligkeitstabelle
  2274.  
  2275.  
  2276.