coco3: import of dragon's gfx code.
authorBrett Gordon <beretta42@gmail.com>
Fri, 9 Oct 2015 14:05:40 +0000 (10:05 -0400)
committerBrett Gordon <beretta42@gmail.com>
Tue, 13 Oct 2015 13:10:42 +0000 (09:10 -0400)
Kernel/platform-coco3/videoll.s

index bbc0fe9..57c3fe1 100644 (file)
@@ -2,12 +2,21 @@
 ;;;  Low-Level Video Routines
 ;;;
 ;;;
+       .module videoll
+
 
        .globl  _memset
        .globl  _memcpy
+
+       include "kernel.def"
+       include "../kernel09.def"
        
        .area .video
 
+VIDEO_BASE  equ         $4000
+
+
+       
 ;;;   void *memset(void *d, int c, size_t sz)
 _memset:
        pshs    x,y
@@ -30,3 +39,42 @@ a@   ldb     ,u+
        leay    -1,y
        bne     a@
        puls    x,y,u,pc
+
+
+
+
+vidptr:
+       ldu     #VIDEO_BASE
+       ldd     ,x++            ; Y into B
+       lda     #32
+       mul
+       leau    d,u
+       ldd     ,x++            ; X
+       leau    d,u
+       rts
+
+
+;;; void video_cmd( char *rle_data );
+_video_cmd:
+       pshs    u
+       bsr     vidptr          ; u now points to the screen
+nextline:
+       pshs    u               ; save it for the next line
+nextop:
+       ldb     ,x+             ; op code, 0 = end of line
+       beq     endline
+oploop:
+       lda     ,u              ; do one screen byte
+       anda    ,x
+       eora    1,x
+       sta     ,u+
+       decb
+       bne     oploop          ; keep going for run
+       leax    2,x
+       bra     nextop          ; next triplet
+endline:
+       puls    u               ; get position back
+       leau    32,u            ; down one scan line
+       ldb     ,x+             ; get next op - 0,0 means end and done
+       bne     oploop
+       puls    u,pc