Cheese / Neos Mouse projekti

Päivitys 2010: [VICE] emuloi NEOS-hiirtä versiosta 2.0 lähtien.

Päivitys 2005: Kuvat ovatkin 304 pikseliä korkeita ja muutakin lisätietoa on löytynyt formaatista.

Päivitys 2004: Kolmen vuoden kuluttua projekti on saatu päätökseen, kun sähköpostilla tuli ratkaisu ongelmaan. Jani teki tarvittavan muutoksen, jolla Cheesepaint saatiin tottelemaan joystickohjausta. Kaupan päälle tuli vielä toinenkin versio Cheesesta. Sivun lopussa on vielä joystickrutiinin assemblylistaus, ei kaunista mutta toimivaa koodia ja se on pääasia.

Lähtötilanne 2001: Tämä projekti sai alkunsa Antti Mäkysen pyynnöstä tutkia saako Cheese piirto-ohjelmalla aikoinaan tehtyjä kuvia enää millään auki. Ongelmana on se, että Cheese on tullut Neos-merkkisen hiiren kylkiäisenä, eikä mikään nykyinen kuusnelosemulaattori tunne kyseistä rottaa. Se ei ole 1350- eikä 1351-hiirien kanssa yhteensopiva. Ohjelma käynnistyy kyllä, mutta kursoria ei saa liikuteltua, jotta kuvat saisi ladattua ruudulle.

Tiedostot

  • [cheese_v1.zip] (19283 tavua) - Ensimmäinen versio Cheesepaintista .d64 muodossa, mukana alkuperäinen ja joystick versio, käyttää kuvanimiä "chpicX".
  • [cheese_v2.zip] (52636 tavua) - Toinen versio Cheesepaintista .d64 muodossa, mukana alkuperäinen (käynnistys: SYS 16384) ja joystick versio, käyttää kuvanimiä "X.che".
  • [a.che] (20482 tavua) - kuva: a_che
  • [b.che] (20482 tavua) - kuva: b_che
  • [c.che] (20482 tavua) - kuva: c_che
  • [d.che] (20482 tavua) - kuva: d_che
  • [e.che] (20482 tavua) - kuva: e_che
  • [f.che] (20482 tavua) - kuva: f_che

Cheese kuvaformaatti on 320x304 multicolor ja se rakentuu seuraavanlaisista osista:

  • 8000-b000 bitmap
  • c200-c800 color screen
  • c800-ce00 color memory
  • ccfd on taustaväri
  • b000-c200 jotain tunnistamatonta dataa

Janin tekemä ohjelma, jolla Cheese kuvia voi katsella ja tallentaa Koalapainter muotoon:

 Cheese osaa ilmeisesti tehdä myös hires kuvia, joiden katselemiseen löytyy kuusneloselle:

Cheesestä purettu Neos-hiiren lukurutiini

Cheese ohjelma siirtää itsensä käynnistyksen jälkeen $3000 muistipaikkaa ylemmäksi, tästä johtuen rutiinissa osa osoitteista näyttää virheellisiltä. Assemblylistaus on tehty 64copy-ohjelmalla, joka antaa osoitteille omat nimensä.

6c00 ad 00 dc                  lda cia1porta
6c03 48                        pha
6c04 ad 01 dc                  lda cia1portb
6c07 48                        pha
6c08 ad 02 dc                  lda cia1ddr_a
6c0b 48                        pha
6c0c ad 03 dc                  lda cia1ddr_b
6c0f 48                        pha
6c10 a9 10                     lda #$10
6c12 8d 02 dc                  sta cia1ddr_a
6c15 ad 00 dc                  lda cia1porta
6c18 29 ef                     and #$ef
6c1a 8d 00 dc                  sta cia1porta
6c1d a2 08                     ldx #$08
6c1f 20 37 3d                  jsr sub_3d37
6c22 ad 00 dc                  lda cia1porta
6c25 0a                        asl a
6c26 0a                        asl a
6c27 0a                        asl a
6c28 0a                        asl a
6c29 85 0f                     sta zp_0f
6c2b ad 00 dc                  lda cia1porta
6c2e 09 10                     ora #$10
6c30 8d 00 dc                  sta cia1porta
6c33 a2 05                     ldx #$05
6c35 20 37 3d                  jsr sub_3d37
6c38 ad 00 dc                  lda cia1porta
6c3b 29 0f                     and #$0f
6c3d 05 0f                     ora zp_0f
6c3f 85 0f                     sta zp_0f
6c41 ad 00 dc                  lda cia1porta
6c44 29 ef                     and #$ef
6c46 8d 00 dc                  sta cia1porta
6c49 a2 05                     ldx #$05
6c4b 20 37 3d                  jsr sub_3d37
6c4e ad 00 dc                  lda cia1porta
6c51 0a                        asl a
6c52 0a                        asl a
6c53 0a                        asl a
6c54 0a                        asl a
6c55 85 0e                     sta zp_0d+1
6c57 ad 00 dc                  lda cia1porta
6c5a 09 10                     ora #$10
6c5c 8d 00 dc                  sta cia1porta
6c5f a2 05                     ldx #$05
6c61 20 37 3d                  jsr sub_3d37
6c64 ad 00 dc                  lda cia1porta
6c67 29 0f                     and #$0f
6c69 05 0e                     ora zp_0d+1
6c6b 85 0e                     sta zp_0d+1
6c6d ad 19 d4                  lda paddle_x
6c70 c9 ff                     cmp #$ff
6c72 f0 05                     beq skip6c79
6c74 a9 00                     lda #$00
6c76 4c 7b 3c                  jmp goto3c7b
6c79 a9 01    skip6c79         lda #$01
6c7b 85 63                     sta zp_63
6c7d 68                        pla
6c7e 8d 03 dc                  sta cia1ddr_b
6c81 68                        pla
6c82 8d 02 dc                  sta cia1ddr_a
6c85 68                        pla
6c86 8d 01 dc                  sta cia1portb
6c89 68                        pla
6c8a 8d 00 dc                  sta cia1porta
6c8d 60                        rts

Lisäksi osoitteessa 6d37 oleva looppi, jota kutsutaan ylemmästä rutiinista 
osoitteella 3d37:

6d37 ea       loop6d37         nop
6d38 ea                        nop
6d39 ea                        nop
6d3a ca                        dex
6d3b d0 fa                     bne loop6d37
6d3d 60                        rts

Uusi joystick lukurutiini Cheesepaintille / Jani

; cheesepaint - routine to replace NEOS-mouse with joy2

;       * = $39c2        ;cheese v1
        * = $3c00        ;cheese v2 (Load to $6c00)

;---------------------------------------
JOYADDR  = $DC00         ;Joy port 2
;---------------------------------------
         LDA JOYADDR
         AND #%00000001              ;UP
         BNE OVER01
         LDA JOYY
         CMP #$00       ;upper limit
         BEQ OVER01
         DEC JOYY
         JSR UPDT

OVER01   LDA JOYADDR
         AND #%00000010            ;DOWN
         BNE OVER02
         LDA JOYY
         CMP #$C7       ;lower limit
         BEQ OVER02
         INC JOYY
         JSR UPDT

OVER02   LDA JOYADDR
         AND #%00000100            ;LEFT
         BNE OVER03
         LDA JOYX
         CMP #$00       ;left limit
         BEQ OVER03
         DEC JOYX
         JSR UPDT

OVER03   LDA JOYADDR
         AND #%00001000           ;RIGHT
         BNE OVER04
         LDA JOYX
         CMP #$9f       ;right limit
         BEQ OVER04
         INC JOYX
         JSR UPDT
OVER04
         LDA JOYADDR              ;FIRE
         AND #%00010000
         BNE NOFIRE

         dec fdel+1     ;delay firebutton
fdel     lda #$04
         bne nofire
         lda #$04
         sta fdel+1

         lda JOYF
         eor #$01
         sta JOYF
         jsr UPDT
NOFIRE 

         RTS

UPDT     LDA JOYY       ;update zp:s for pointer
;         STA $67        ;cheese v1
         STA $6c        ;cheese v2

         LDA JOYX
;         STA $68        ;cheese v1
         STA $6d        ;cheese v2

         LDA JOYF
;         sta $5e        ;cheese v1
         sta $63        ;cheese v2

         RTS

;---------------------------------------
JOYX    .BYTE $00
JOYY    .BYTE $00
JOYF    .BYTE $00
;---------------------------------------

© Niila T Rautanen 2010

[Takaisin]