diff level1/cmds/grfdrv.asm @ 1933:1e312b144f4d

Major changes: CCIO,CC3IO are now VTIO GrfInt is now CoGrf WindInt is now CoWin VDGInt (L2), CO32 (L1) is now CoVDG CO51 (L1) is now CoHR CO80 (L1) is now CoWP All files referencing these have been changed
author boisy
date Sat, 26 Nov 2005 21:31:29 +0000
parents
children b41df77588b0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/cmds/grfdrv.asm	Sat Nov 26 21:31:29 2005 +0000
@@ -0,0 +1,558 @@
+********************************************************************
+* GrfDrv - Graphics module
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   1      ????/??/??
+* From Tandy OS-9 Level One VR 02.00.00.
+
+         nam   GrfDrv
+         ttl   Graphics module
+
+* Disassembled 02/04/05 23:44:21 by Disasm v1.6 (C) 1988 by RML
+
+         ifp1
+         use   defsfile
+         use   vtiodefs
+         endc
+
+tylg     set   Systm+Objct   
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   1
+
+         mod   eom,name,tylg,atrv,start,size
+
+         org   0
+size     equ   .
+
+         fcb   $07 
+name     fcs   /GrfDrv/
+         fcb   edition
+
+* Dispatch table
+start    lbra  Init
+         lbra  Write
+         lbra  GetStat
+         lbra  SetStat
+         lbra  Term
+
+* 128x192 4 color pixel table
+Mode1Clr fdb   $0055,$aaff
+
+GetStat
+SetStat  comb
+         ldb   #E$UnkSvc
+         rts
+
+Write    suba  #$15
+         leax  <Table,pcr
+         lsla
+         ldd   a,x
+         jmp   d,x
+
+Table    fdb   Do15-Table
+         fdb   Do16-Table
+         fdb   Do17-Table
+         fdb   Do18-Table
+         fdb   Do19-Table
+         fdb   Do1A-Table
+         fdb   NoOp-Table
+         fdb   Do1C-Table
+         fdb   Do1D-Table
+         fdb   NoOp-Table
+         fdb   NoOp-Table
+
+* Fix X/Y coords:
+* - if Y > 191 then cap it at 191
+* - adjust X coord if in 128x192 mode
+FixXY    ldd   <V.NChar,u	get next 2 charas
+         cmpb  #192		Y greater than max?
+         bcs   L0053		branch if lower than
+         ldb   #191
+L0053    tst   <V.Mode,u	which mode?
+         bmi   L0059		branch if 256x192
+         lsra  			else divide X by 2
+L0059    std   <V.NChar,u	and save
+         rts   
+
+* $15 - set graphics cursor
+Do15     leax  <SetGC,pcr	load X with return address
+GChar2   ldb   #$02		need two parameters
+         lbra  GChar
+
+SetGC    bsr   FixXY		fix coords
+         std   <V.GCrsX,u	and save new gfx cursor pos
+
+NoOp
+Init
+Term     clrb  
+         rts   
+
+* $19 - erase point
+Do19     clr   <V.Msk1,u
+* $18 - set point
+Do18     leax  <DrawPnt,pcr
+         bra   GChar2
+
+DrawPnt  bsr   FixXY		fix coords
+         std   <V.GCrsX,u	save as new gfx cursor pos
+         bsr   DrwPt2
+         lbra  L014A
+DrwPt2   jsr   [<V.CnvVct,u]
+L0081    tfr   a,b
+         comb  
+         andb  ,x
+         stb   ,x
+         anda  <V.Msk1,u	and with mask
+         ora   ,x
+         sta   ,x
+         rts   
+
+* $17 - erase line
+Do17     clr   <V.Msk1,u	clear mask value
+
+* $16 - draw line
+Do16     leax  <DrawLine,pcr	load X with return address
+         bra   GChar2		need two params
+
+DrawLine bsr   FixXY		fix up coords
+         leas  -$0E,s		make room on stack
+         std   $0C,s		save X/Y
+         jsr   [<V.CnvVct,u]	get address given X/Y
+         stx   $02,s		save on stack
+         sta   $01,s		and pixel too
+         ldd   <V.GCrsX,u	get current graphics cursor
+         jsr   [<V.CnvVct,u]	get address given X/Y
+         sta   ,s
+         clra  
+         clrb  
+         std   $04,s
+         lda   #$BF
+         suba  <V.GCrsY,u
+         sta   <V.GCrsY,u
+         lda   #$BF
+         suba  <V.NChr2,u
+         sta   <V.NChr2,u
+         lda   #$FF
+         sta   $06,s
+         clra  
+         ldb   <V.GCrsX,u
+         subb  <V.NChar,u
+         sbca  #$00
+         bpl   L00D6
+         nega  
+         negb  
+         sbca  #$00
+         neg   $06,s
+L00D6    std   $08,s
+         bne   L00DF
+         ldd   #$FFFF
+         std   $04,s
+L00DF    lda   #$E0
+         sta   $07,s
+         clra  
+         ldb   <V.GCrsY,u
+         subb  <V.NChr2,u
+         sbca  #$00
+         bpl   L00F4
+         nega  
+         negb  
+         sbca  #$00
+         neg   $07,s
+L00F4    std   $0A,s
+         bra   L0100
+L00F8    sta   ,s
+         ldd   $04,s
+         subd  $0A,s
+         std   $04,s
+L0100    lda   ,s
+         lbsr  L0081
+         cmpx  $02,s
+         bne   L010F
+         lda   ,s
+         cmpa  $01,s
+         beq   L0143
+L010F    ldd   $04,s
+         bpl   L011D
+         addd  $08,s
+         std   $04,s
+         lda   $07,s
+         leax  a,x
+         bra   L0100
+L011D    lda   ,s
+         ldb   $06,s
+         bpl   L0133
+         lsla  
+         ldb   <V.Mode,u	which mode?
+         bmi   L012A		branch if 256x192
+         lsla  
+L012A    bcc   L00F8
+         lda   <V.4A,u
+         leax  -$01,x
+         bra   L00F8
+L0133    lsra  
+         ldb   <V.Mode,u	which mode?
+         bmi   L013A		branch if 256x196
+         lsra  
+L013A    bcc   L00F8
+         lda   <V.MCol,u
+         leax  $01,x
+         bra   L00F8
+L0143    ldd   $0C,s
+         std   <V.GCrsX,u
+         leas  $0E,s
+L014A    lda   <V.Msk2,u
+         sta   <V.Msk1,u
+         clrb  
+         rts   
+
+* $1C - erase circle
+Do1C     clr   <V.Msk1,u	clear mask value
+* $1A - draw circle
+Do1A     leax  <Circle,pcr
+         ldb   #$01		require another param -- radius
+GChar    stb   <V.NGChr,u	one more char
+         stx   <V.RTAdd,u	return address
+         clrb  
+         rts   
+
+Circle   leas  -$04,s		make room on stack
+         ldb   <V.NChr2,u	get radius
+         stb   $01,s		store on stack
+         clra  
+         sta   ,s
+         addb  $01,s
+         adca  #$00
+         nega  
+         negb  
+         sbca  #$00
+         addd  #$0003
+         std   $02,s
+L0179    lda   ,s
+         cmpa  $01,s
+         bcc   L01AB
+         ldb   $01,s
+         bsr   L01B9
+         clra  
+         ldb   $02,s
+         bpl   L0193
+         ldb   ,s
+         lslb  
+         rola  
+         lslb  
+         rola  
+         addd  #$0006
+         bra   L01A3
+L0193    dec   $01,s
+         clra  
+         ldb   ,s
+         subb  $01,s
+         sbca  #$00
+         lslb  
+         rola  
+         lslb  
+         rola  
+         addd  #$000A
+L01A3    addd  $02,s
+         std   $02,s
+         inc   ,s
+         bra   L0179
+L01AB    lda   ,s
+         cmpa  $01,s
+         bne   L01B5
+         ldb   $01,s
+         bsr   L01B9
+L01B5    leas  $04,s
+         bra   L014A
+L01B9    leas  -$08,s
+         sta   ,s
+         clra  
+         std   $02,s
+         nega  
+         negb  
+         sbca  #$00
+         std   $06,s
+         ldb   ,s
+         clra  
+         std   ,s
+         nega  
+         negb  
+         sbca  #$00
+         std   $04,s
+         ldx   $06,s
+         bsr   L0202
+         ldd   $04,s
+         ldx   $02,s
+         bsr   L0202
+         ldd   ,s
+         ldx   $02,s
+         bsr   L0202
+         ldd   ,s
+         ldx   $06,s
+         bsr   L0202
+         ldd   $02,s
+         ldx   ,s
+         bsr   L0202
+         ldd   $02,s
+         ldx   $04,s
+         bsr   L0202
+         ldd   $06,s
+         ldx   $04,s
+         bsr   L0202
+         ldd   $06,s
+         ldx   ,s
+         bsr   L0202
+         leas  $08,s
+         rts   
+L0202    pshs  b,a
+         ldb   <V.GCrsY,u
+         clra  
+         leax  d,x
+         cmpx  #$0000
+         bmi   L0214
+         cmpx  #$00BF
+         ble   L0216
+L0214    puls  pc,b,a
+L0216    ldb   <V.GCrsX,u
+         clra  
+         tst   <V.Mode,u
+         bmi   L0221
+         lslb  
+         rola  
+L0221    addd  ,s++
+         tsta  
+         beq   L0227
+         rts   
+L0227    pshs  b
+         tfr   x,d
+         puls  a
+         tst   <V.Mode,u	which mode?
+         lbmi  DrwPt2		branch if 256x192
+         lsra  			else divide A by 2
+         lbra  DrwPt2
+
+* $1D - flood fill
+Do1D     clr   <V.FFFlag,u
+         leas  -$07,s
+         lbsr  L03AB
+         lbcs  L0346
+         lda   #$FF
+         sta   <V.4F,u
+         ldd   <V.GCrsX,u
+         lbsr  L0351
+         lda   <V.4C,u
+         sta   <V.4D,u
+         tst   <V.Mode,u	which mode?
+         bpl   L0261		branch if 128x192
+         tsta  
+         beq   L0267
+         lda   #$FF
+         bra   L0267
+L0261    leax  >Mode1Clr,pcr
+         lda   a,x
+L0267    sta   <V.4E,u
+         cmpa  <V.Msk1,u
+         lbeq  L0346
+         ldd   <V.GCrsX,u
+L0274    suba  #$01
+         bcs   L027F
+         lbsr  L0351
+         bcs   L027F
+         beq   L0274
+L027F    inca  
+         std   $01,s
+L0282    lbsr  L0384
+         adda  #$01
+         bcs   L0290
+         lbsr  L0351
+         bcs   L0290
+         beq   L0282
+L0290    deca  
+         ldx   $01,s
+         lbsr  L03D3
+         neg   <V.4F,u
+         lbsr  L03D3
+L029C    lbsr  L03F9
+         lbcs  L0346
+         tst   <V.4F,u
+         bpl   L02B3
+         subb  #$01
+         bcs   L029C
+         std   $03,s
+         tfr   x,d
+         decb  
+         bra   L02BD
+L02B3    incb  
+         cmpb  #$BF
+         bhi   L029C
+         std   $03,s
+         tfr   x,d
+         incb  
+L02BD    std   $01,s
+         lbsr  L0351
+         bcs   L029C
+L02C4    bne   L02D2
+         suba  #$01
+         bcc   L02CD
+         inca  
+         bra   L02D6
+L02CD    lbsr  L0351
+         bcc   L02C4
+L02D2    adda  #$01
+         bcs   L029C
+L02D6    cmpd  $03,s
+         bhi   L029C
+         bsr   L0351
+         bcs   L029C
+         bne   L02D2
+         std   $05,s
+         cmpd  $01,s
+         bcc   L02FB
+         ldd   $01,s
+         decb  
+         cmpd  $05,s
+         beq   L02FB
+         neg   <V.4F,u
+         ldx   $05,s
+         lbsr  L03D3
+         neg   <V.4F,u
+L02FB    ldd   $05,s
+L02FD    std   $01,s
+L02FF    bsr   L0351
+         bcs   L030B
+         bne   L030B
+         bsr   L0384
+         adda  #$01
+         bcc   L02FF
+L030B    deca  
+         ldx   $01,s
+         lbsr  L03D3
+         std   $05,s
+         adda  #$01
+         bcs   L0326
+L0317    cmpd  $03,s
+         bcc   L0326
+         adda  #$01
+         bsr   L0351
+         bcs   L0326
+         bne   L0317
+         bra   L02FD
+L0326    inc   $03,s
+         inc   $03,s
+         ldd   $03,s
+         cmpa  #$02
+         lbcs  L029C
+         ldd   $05,s
+         cmpd  $03,s
+         lbcs  L029C
+         neg   <V.4F,u
+         ldx   $03,s
+         lbsr  L03D3
+         lbra  L029C
+L0346    leas  $07,s
+         clrb  
+         ldb   <V.FFFlag,u
+         beq   L0350
+L034E    orcc  #Carry
+L0350    rts   
+L0351    pshs  b,a
+         cmpb  #$BF
+         bhi   L0380
+         tst   <V.Mode,u	which mode?
+         bmi   L0360		branch if 256x192
+         cmpa  #$7F
+         bhi   L0380
+L0360    jsr   [<V.CnvVct,u]
+         tfr   a,b
+         andb  ,x
+L0367    bita  #$01
+         bne   L0376
+         lsra  
+         lsrb  
+         tst   <V.Mode,u	which mode?
+         bmi   L0367		branch if 256x192
+         lsra  
+         lsrb  
+         bra   L0367
+L0376    stb   <V.4C,u
+         cmpb  <V.4D,u
+         andcc #^Carry
+         puls  pc,b,a
+L0380    orcc  #Carry
+         puls  pc,b,a
+L0384    pshs  b,a
+         jsr   [<V.CnvVct,u]
+         bita  #$80
+         beq   L03A6
+         ldb   <V.4E,u
+         cmpb  ,x
+         bne   L03A6
+         ldb   <V.Msk1,u
+         stb   ,x
+         puls  b,a
+         tst   <V.Mode,u	which mode?
+         bmi   L03A3		branch if 256x192
+         adda  #$03
+         rts   
+L03A3    adda  #$07
+         rts   
+L03A6    lbsr  L0081
+         puls  pc,b,a
+L03AB    ldx   <V.FFSTp,u	get top of flood fill stack
+         beq   L03B5		if zero, we need to allocate stack
+         stx   <V.FFSPt,u	else reset flood fill stack ptr
+L03B3    clrb  
+         rts   
+
+* Allocate Flood Fill Stack
+L03B5    pshs  u		save U for now
+         ldd   #$0200		get 512 bytes
+         os9   F$SRqMem 	from system
+         bcc   AllocOk		branch if ok
+         puls  pc,u		else pull out with error
+AllocOk  tfr   u,d		move pointer to alloced mem to D
+         puls  u		get stat pointer we saved earlier
+         std   <V.FFMem,u	save pointer to alloc'ed mem
+         addd  #512		point D to end of alloc'ed mem
+         std   <V.FFSTp,u	and save here as top of fill stack
+         std   <V.FFSPt,u	and here
+         bra   L03B3		do a clean return
+
+L03D3    pshs  b,a
+         ldd   <V.FFSPt,u
+         subd  #$0004
+         cmpd  <V.FFMem,u
+         bcs   L03F2
+         std   <V.FFSPt,u
+         tfr   d,y
+         lda   <V.4F,u
+         sta   ,y
+         stx   $01,y
+         puls  b,a
+         sta   $03,y
+         rts   
+L03F2    ldb   #$F5
+         stb   <V.FFFlag,u
+         puls  pc,b,a
+L03F9    ldd   <V.FFSPt,u
+         cmpd  <V.FFSTp,u		top of flood fill stack?
+         lbcc  L034E
+         tfr   d,y
+         addd  #$0004
+         std   <V.FFSPt,u
+         lda   ,y
+         sta   <V.4F,u
+         ldd   $01,y
+         tfr   d,x
+         lda   $03,y
+         andcc #^Carry
+         rts   
+
+         emod
+eom      equ   *
+         end
+