From a8c6500fc3867a9fb6fb4cb59d62e844e7df9db1 Mon Sep 17 00:00:00 2001 From: Brett Gordon Date: Fri, 9 Oct 2015 10:05:40 -0400 Subject: [PATCH] coco3: import of dragon's gfx code. --- Kernel/platform-coco3/videoll.s | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/Kernel/platform-coco3/videoll.s b/Kernel/platform-coco3/videoll.s index bbc0fe92..57c3fe1a 100644 --- a/Kernel/platform-coco3/videoll.s +++ b/Kernel/platform-coco3/videoll.s @@ -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 -- 2.34.1