]> git.sur5r.net Git - cc65/blobdiff - libsrc/c64/c64-320-200-2.s
fix comments
[cc65] / libsrc / c64 / c64-320-200-2.s
index 69cc0b78fd24a0598167b6be2d0412c7f2cfb9a7..e711dc6b8c039614709c9c1f529b4b406585ab54 100644 (file)
         .byte   1                       ; Number of screens available
         .byte   8                       ; System font X size
         .byte   8                       ; System font Y size
-        .res    4, $00                  ; Reserved for future extensions
-
-; Next comes the jump table. Currently all entries must be valid and may point
-; to an RTS for test versions (function not implemented). A future version may
-; allow for emulation: In this case the vector will be zero. Emulation means
-; that the graphics kernel will emulate the function by using lower level
-; primitives - for example ploting a line by using calls to SETPIXEL.
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   INIT
-        .word   DONE
-       .word   GETERROR
-        .word   CONTROL
-        .word   CLEAR
-        .word   SETVIEWPAGE
-        .word   SETDRAWPAGE
-        .word   SETCOLOR
-        .word   SETPALETTE
-        .word   GETPALETTE
-        .word   GETDEFPALETTE
-        .word   SETPIXEL
-        .word   GETPIXEL
-        .word   LINE
-        .word   BAR
-        .word   CIRCLE
-        .word   TEXTSTYLE
-        .word   OUTTEXT
+        .word   $100                    ; Aspect ratio
+
+; Next comes the jump table. With the exception of IRQ, all entries must be
+; valid and may point to an RTS for test versions (function not implemented).
+
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   INIT
+        .addr   DONE
+               .addr   GETERROR
+        .addr   CONTROL
+        .addr   CLEAR
+        .addr   SETVIEWPAGE
+        .addr   SETDRAWPAGE
+        .addr   SETCOLOR
+        .addr   SETPALETTE
+        .addr   GETPALETTE
+        .addr   GETDEFPALETTE
+        .addr   SETPIXEL
+        .addr   GETPIXEL
+        .addr   LINE
+        .addr   BAR
+        .addr   TEXTSTYLE
+        .addr   OUTTEXT
+        .addr   0                       ; IRQ entry is unused
 
 ; ------------------------------------------------------------------------
 ; Data.
@@ -69,7 +66,6 @@ X1              := ptr1
 Y1              := ptr2
 X2              := ptr3
 Y2              := ptr4
-RADIUS          := tmp1
 
 ROW             := tmp2         ; Bitmap row...
 COL             := tmp3         ; ...and column, both set by PLOT
@@ -97,21 +93,11 @@ OLDD018:        .res    1       ; Old register value
 DX:             .res    2
 DY:             .res    2
 
-; Circle routine stuff, overlaid by BAR variables
-X1SAVE:
-CURX:           .res    1
-CURY:           .res    1
-Y1SAVE:
-BROW:           .res    1       ; Bottom row
-TROW:           .res    1       ; Top row
-X2SAVE:
-LCOL:           .res    1       ; Left column
-RCOL:           .res    1       ; Right column
-Y2SAVE:
-CHUNK1:         .res    1
-OLDCH1:         .res    1
-CHUNK2:         .res    1
-OLDCH2:         .res    1
+; BAR variables
+X1SAVE:         .res    2
+Y1SAVE:         .res    2
+X2SAVE:         .res    2
+Y2SAVE:         .res    2
 
 ; Text output stuff
 TEXTMAGX:       .res    1
@@ -858,334 +844,6 @@ BAR:      lda     Y2
 @L4:    rts
 
 
-; ------------------------------------------------------------------------
-; CIRCLE: Draw a circle around the center X1/Y1 (= ptr1/ptr2) with the
-; radius in tmp1 and the current drawing color.
-;
-; Must set an error code: NO
-;
-
-CIRCLE: lda     RADIUS
-        sta     CURY
-        bne     @L1
-        jmp     SETPIXEL        ; Plot as a point
-
-@L1:    clc
-        adc     Y1
-        sta     Y1
-        bcc     @L2
-        inc     Y1+1
-@L2:    jsr     CALC            ; Compute XC, YC+R
-
-        lda     ROW
-        sta     BROW
-        lda     COL
-        sta     LCOL
-        sta     RCOL
-
-        sty     Y2              ; Y AND 07
-        lda     BITCHUNK,X
-        sta     CHUNK1          ; Forwards chunk
-        sta     OLDCH1
-        lsr
-        eor     #$FF
-        sta     CHUNK2          ; Backwards chunk
-        sta     OLDCH2
-        lda     POINT
-        sta     TEMP2           ; TEMP2 = forwards high pointer
-        sta     X2              ; X2 = backwards high pointer
-        lda     POINT+1
-        sta     TEMP2+1
-        sta     X2+1
-
-; Next compute CY-R
-
-        lda     Y1
-        sec
-        sbc     RADIUS
-        bcs     @C3
-        dec     Y1+1
-        sec
-@C3:    sbc     RADIUS
-        bcs     @C4
-        dec     Y1+1
-@C4:    sta     Y1
-
-        jsr     CALC            ; Compute new coords
-        sty     Y1
-        lda     POINT
-        sta     X1              ; X1 will be the backwards
-        lda     POINT+1         ; low-pointer
-        sta     X1+1            ; POINT will be forwards
-        lda     ROW
-        sta     TROW
-
-        sei                     ; Get underneath ROM
-        lda     #$34
-        sta     $01
-
-        lda     RADIUS
-        lsr                     ; A=r/2
-        ldx     #00
-        stx     CURX            ; y=0
-
-; Main loop
-
-@LOOP:  inc     CURX            ; x=x+1
-
-        lsr     CHUNK1          ; Right chunk
-        bne     @CONT1
-        jsr     UPCHUNK1        ; Update if we move past a column
-@CONT1: asl     CHUNK2
-        bne     @CONT2
-        jsr     UPCHUNK2
-@CONT2: sec
-        sbc     CURX            ; a=a-x
-        bcs     @LOOP
-
-        adc     CURY         ;if a<0 then a=a+y; y=y-1
-        tax
-        jsr     PCHUNK1
-        jsr     PCHUNK2
-        lda     CHUNK1
-        sta     OLDCH1
-        lda     CHUNK2
-        sta     OLDCH2
-        txa
-
-        dec     CURY         ;(y=y-1)
-
-        dec     Y2           ;Decrement y-offest for upper
-        bpl     @CONT3       ;points
-        jsr     DECYOFF
-@CONT3: ldy     Y1
-        iny
-        sty     Y1
-        cpy     #8
-        bcc     @CONT4
-        jsr     INCYOFF
-@CONT4: ldy     CURX
-        cpy     CURY         ;if y<=x then punt
-        bcc     @LOOP        ;Now draw the other half
-;
-; Draw the other half of the circle by exactly reversing
-; the above!
-;
-NEXTHALF:
-        lsr     OLDCH1       ;Only plot a bit at a time
-        asl     OLDCH2
-        lda     RADIUS       ;A=-R/2-1
-        lsr
-        eor     #$FF
-@LOOP:
-        tax
-        jsr     PCHUNK1      ;Plot points
-        jsr     PCHUNK2
-        txa
-        dec     Y2           ;Y2=bottom
-        bpl     @CONT1
-        jsr     DECYOFF
-@CONT1: inc     Y1
-        ldy     Y1
-        cpy     #8
-        bcc     @CONT2
-        jsr     INCYOFF
-@CONT2: ldx     CURY
-        beq     @DONE
-        clc
-        adc     CURY         ;a=a+y
-        dec     CURY         ;y=y-1
-        bcc     @LOOP
-
-        inc     CURX
-        sbc     CURX         ;if a<0 then x=x+1; a=a+x
-        lsr     CHUNK1
-        bne     @CONT3
-        tax
-        jsr     UPCH1        ;Upchunk, but no plot
-@CONT3: lsr     OLDCH1       ;Only the bits...
-        asl     CHUNK2       ;Fix chunks
-        bne     @CONT4
-        tax
-        jsr     UPCH2
-@CONT4: asl     OLDCH2
-        bcs     @LOOP
-@DONE:
-CIRCEXIT:                    ;Restore interrupts
-        lda     #$37
-        sta     $01
-        cli
-        rts
-;
-; Decrement lower pointers
-;
-DECYOFF:
-        tay
-        lda     #7
-        sta     Y2
-
-        lda     X2           ;If we pass through zero, then
-        sec
-        sbc     #<320        ;subtract 320
-        sta     X2
-        lda     X2+1
-        sbc     #>320
-        sta     X2+1
-        lda     TEMP2
-        sec
-        sbc     #<320
-        sta     TEMP2
-        lda     TEMP2+1
-        sbc     #>320
-        sta     TEMP2+1
-
-        tya
-        dec     BROW
-        bmi     EXIT2
-        rts
-EXIT2:  pla                  ;Grab return address
-        pla
-        jmp     CIRCEXIT     ;Restore interrupts, etc.
-
-; Increment upper pointers
-INCYOFF:
-        tay
-        lda     #00
-        sta     Y1
-        lda     X1
-        clc
-        adc     #<320
-        sta     X1
-        lda     X1+1
-        adc     #>320
-        sta     X1+1
-        lda     POINT
-        clc
-        adc     #<320
-        sta     POINT
-        lda     POINT+1
-        adc     #>320
-        sta     POINT+1
-@ISKIP: inc     TROW
-        bmi     @DONE
-        lda     TROW
-        cmp     #25
-        bcs     EXIT2
-@DONE:  tya
-        rts
-
-;
-; UPCHUNK1 -- Update right-moving chunk pointers
-;             Due to passing through a column
-;
-UPCHUNK1:
-        tax
-        jsr     PCHUNK1
-UPCH1:  lda     #$FF         ;Alternative entry point
-        sta     CHUNK1
-        sta     OLDCH1
-        lda     TEMP2
-        clc
-        adc     #8
-        sta     TEMP2
-        bcc     @CONT
-        inc     TEMP2+1
-        clc
-@CONT:  lda     POINT
-        adc     #8
-        sta     POINT
-        bcc     @DONE
-        inc     POINT+1
-@DONE:  txa
-        inc     RCOL
-        rts
-
-;
-; UPCHUNK2 -- Update left-moving chunk pointers
-;
-UPCHUNK2:
-        tax
-        jsr     PCHUNK2
-UPCH2:  lda     #$FF
-        sta     CHUNK2
-        sta     OLDCH2
-        lda     X2
-        sec
-        sbc     #8
-        sta     X2
-        bcs     @CONT
-        dec     X2+1
-        sec
-@CONT:  lda     X1
-        sbc     #8
-        sta     X1
-        bcs     @DONE
-        dec     X1+1
-@DONE:  txa
-        dec     LCOL
-        rts
-;
-; Plot right-moving chunk pairs for circle routine
-;
-PCHUNK1:
-
-        lda     RCOL         ;Make sure we're in range
-        cmp     #40
-        bcs     @SKIP2
-        lda     CHUNK1       ;Otherwise plot
-        eor     OLDCH1
-        sta     TEMP
-        lda     TROW         ;Check for underflow
-        bmi     @SKIP
-        ldy     Y1
-        lda     (POINT),y
-        eor     BITMASK
-        and     TEMP
-        eor     (POINT),y
-        sta     (POINT),y
-
-@SKIP:  lda     BROW         ;If CY+Y >= 200...
-        cmp     #25
-        bcs     @SKIP2
-        ldy     Y2
-        lda     (TEMP2),y
-        eor     BITMASK
-        and     TEMP
-        eor     (TEMP2),y
-        sta     (TEMP2),y
-@SKIP2: rts
-
-;
-; Plot left-moving chunk pairs for circle routine
-;
-
-PCHUNK2:
-        lda     LCOL         ;Range check in X
-        cmp     #40
-        bcs     EXIT3
-        lda     CHUNK2       ;Otherwise plot
-        eor     OLDCH2
-        sta     TEMP
-        lda     TROW         ;Check for underflow
-        bmi     @SKIP
-        ldy     Y1
-        lda     (X1),y
-        eor     BITMASK
-        and     TEMP
-        eor     (X1),y
-        sta     (X1),y
-
-@SKIP:  lda     BROW         ;If CY+Y >= 200...
-        cmp     #25
-        bcs     EXIT3
-        ldy     Y2
-        lda     (X2),y
-        eor     BITMASK
-        and     TEMP
-        eor     (X2),y
-        sta     (X2),y
-EXIT3:  rts
-
 ; ------------------------------------------------------------------------
 ; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
 ; direction is passend in X/Y, the text direction is passed in A.