X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libsrc%2Fc128%2Fc128-640-200-2.s;h=c43601fbc0b6f47f6da0221d27c1413e2a09b052;hb=b45d25d60f33f386de8d43bb1c039e5368dd002e;hp=a220b9f55d1e682de22d067d12be1c13c4c7a133;hpb=17a99e2709132c70c6f2bf5a96120c6147837303;p=cc65 diff --git a/libsrc/c128/c128-640-200-2.s b/libsrc/c128/c128-640-200-2.s index a220b9f55..c43601fbc 100644 --- a/libsrc/c128/c128-640-200-2.s +++ b/libsrc/c128/c128-640-200-2.s @@ -69,7 +69,7 @@ pages: .byte 1 ; Number of screens available ; primitives - for example ploting a line by using calls to SETPIXEL. .word INSTALL - .word DEINSTALL + .word UNINSTALL .word INIT .word DONE .word GETERROR @@ -263,19 +263,19 @@ settestadr2: jmp VDCSetSourceAddr ; ------------------------------------------------------------------------ -; DEINSTALL routine. Is called before the driver is removed from memory. May +; UNINSTALL routine. Is called before the driver is removed from memory. May ; clean up anything done by INSTALL but is probably empty most of the time. ; ; Must set an error code: NO ; -DEINSTALL: +UNINSTALL: rts ; ------------------------------------------------------------------------ ; INIT: Changes an already installed device from text mode to graphics -; mode. The number of the graphics mode is passed to the function in A. +; mode. ; Note that INIT/DONE may be called multiple times while the driver ; is loaded, while INSTALL is only called once, so any code that is needed ; to initializes variables and so on must go here. Setting palette and @@ -287,10 +287,7 @@ DEINSTALL: ; Must set an error code: YES ; -INIT: cmp #TGI_MODE_640_200_2 ; Correct mode? - beq @L1 ; Jump if yes - lda #TGI_ERR_INV_MODE ; ## Error - bne @L9 +INIT: ; Initialize variables @@ -317,7 +314,7 @@ INIT: cmp #TGI_MODE_640_200_2 ; Correct mode? ; Done, reset the error code lda #TGI_ERR_OK -@L9: sta ERROR + sta ERROR rts ; ------------------------------------------------------------------------ @@ -349,7 +346,8 @@ DONE: jsr VDCWriteReg ; restore color (background) lda #$47 ldx #VDC_HSCROLL - jmp VDCWriteReg ; switch to text screen + jsr VDCWriteReg ; switch to text screen +; fall through to GETERROR in order to clear ERROR status ; ------------------------------------------------------------------------ ; GETERROR: Return the error code in A and clear it. @@ -377,7 +375,7 @@ CONTROL: ; Must set an error code: NO ; -CLEAR: +CLEAR: lda #0 ldy SCRBASE jsr VDCSetSourceAddr @@ -698,63 +696,70 @@ HORLINE: ; LINE: - ; if (x2>x1) { - ldx #X1 - lda X2 - ldy X2+1 - jsr icmp - bcc @L0137 - beq @L0137 - ; x2<->x1 } - lda X1 - ldx X2 - sta X2 - stx X1 - lda X1+1 - ldx X2+1 - sta X2+1 - stx X1+1 -@L0137: ; if (y2>y1) { - ldx #Y1 - lda Y2 - ldy Y2+1 - jsr icmp - bcc @L013F - bne @nequal - jmp HORLINE ; x1/x2 are sorted, y1==y2 - do faster horizontal line draw -@nequal: - ; y2<->y1 } - lda Y1 - ldx Y2 - sta Y2 - stx Y1 - lda Y1+1 - ldx Y2+1 - sta Y2+1 - stx Y1+1 -@L013F: - ; nx = x2 - x1 + ; nx = abs(x2 - x1) lda X2 sec sbc X1 sta NX lda X2+1 sbc X1+1 - sta NX+1 - ; ny = y2 - y1 + tay + lda NX + jsr abs + sta NX + sty NX+1 + ; ny = abs(y2 - y1) lda Y2 sec sbc Y1 sta NY lda Y2+1 sbc Y1+1 - sta NY+1 + tay + lda NY + jsr abs + sta NY + sty NY+1 + ; if (x2>x1) + ldx #X2 + lda X1 + ldy X1+1 + jsr icmp + bcc @L0243 + beq @L0243 + ; dx = 1; + lda #1 + bne @L0244 + ; else + ; dx = -1; +@L0243: lda #$ff +@L0244: sta DX + ; if (y2>y1) + ldx #Y2 + lda Y1 + ldy Y1+1 + jsr icmp + bcc @L024A + beq @L024A + ; dy = 1; + lda #1 + bne @L024B + ; else + ; dy = -1; +@L024A: lda #$ff +@L024B: sta DY + ; err = ay = 0; + lda #0 + sta ERR + sta ERR+1 + sta AY + ; if (nx ny lda NX ldx NY @@ -764,21 +769,19 @@ LINE: ldx NY+1 sta NY+1 stx NX+1 - ; dx = dy = 0; ax = ay = 1 } - ldy #1 - sty AY - dey - beq @L025A - ; else { dx = dy = 1; ax = ay = 0 } -@L041B: ldy #0 - sty AY - iny -@L025A: sty DX - sty DY - ; err = 0 + ; ay = dx + lda DX + sta AY + ; dx = dy = 0; lda #0 - sta ERR - sta ERR+1 + sta DX + sta DY + ; ny = - ny; +@L0255: lda NY + ldy NY+1 + jsr neg + sta NY + sty NY+1 ; for (count=nx;count>0;--count) { lda NX ldx NX+1 @@ -790,13 +793,13 @@ LINE: rts ; setpixel(X1,Y1) @L0167: jsr SETPIXELCLIP - ; pb = err - ny + ; pb = err + ny lda ERR - sec - sbc NY + clc + adc NY sta PB lda ERR+1 - sbc NY+1 + adc NY+1 sta PB+1 tax ; ub = pb + nx @@ -808,21 +811,27 @@ LINE: adc NX+1 sta UB+1 ; x1 = x1 + dx - lda X1 - clc - adc DX + ldx #0 + lda DX + bpl @L027B + dex +@L027B: clc + adc X1 sta X1 - bcc @L0254 - inc X1+1 + txa + adc X1+1 + sta X1+1 ; y1 = y1 + ay -@L0254: - lda Y1 - clc - adc AY + ldx #0 + lda AY + bpl @L027E + dex +@L027E: clc + adc Y1 sta Y1 - bcc @L0255 - inc Y1+1 -@L0255: + txa + adc Y1+1 + sta Y1+1 ; if (abs(pb)