;->s.vtasm3
;
;


R0 RN 0
R1 RN 1
R2 RN 2
R3 RN 3
R4 RN 4
R5 RN 5
R6 RN 6
R7 RN 7
R8 RN 8
R9 RN 9
R10 RN 10
R11 RN 11
R12 RN 12
R13 RN 13
R14 RN 14
R15 RN 15
PC  RN 15


a1 RN 0
a2 RN 1
a3 RN 2
a4 RN 3
v1 RN 4
v2 RN 5
v3 RN 6
v4 RN 7
v5 RN 8
v6 RN 9
sl RN 10
fp RN 11
ip RN 12
sp RN 13
lk RN 14
lr RN 14
pc RN 15

f0 FN 0
f1 FN 1
f2 FN 2
f3 FN 3
f4 FN 4
f5 FN 5
f6 FN 6
f7 FN 7







osbyte * 6
OS_Byte * 6
osvduv * 49
osword * 7
xoffch * 19
xonch  * 17
OS_EnterOS * &16
SVC_Mode * 3



 AREA  VTASM1, REL, CODE


 IMPORT chars00
 IMPORT chars18
 IMPORT fancyLOS
 IMPORT fancyHIS
 IMPORT vtcolpal
 IMPORT vtdblecolpal



; a1 pointer to data in memory
; a2 pointer to destination of bit map
; a3 number of characters to output
; a4 width  of sprite in bytes
;
; v1 char word
; v2 temp
; v3 character defn.
; v4 where we write output bytes
; v5 colour
; v6 colour


line169045S
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#12

lp169045S1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars00    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#3 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtcolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]

 MOV    v4,a2

 MOV    lk,#9

lp169045S2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 MOVNE  v2,v5
 MOVEQ  v2,v6
 TST    v1,#&02
 ORRNE  v2,v2,v5,ASL#16
 ORREQ  v2,v2,v6,ASL#16
 STR    v2,[v4],#4


 TST    v1,#&04
 MOVNE  v2,v5
 MOVEQ  v2,v6
 TST    v1,#&08
 ORRNE  v2,v2,v5,ASL#16
 ORREQ  v2,v2,v6,ASL#16
 STR    v2,[v4],#4


 TST    v1,#&10
 MOVNE  v2,v5
 MOVEQ  v2,v6
 TST    v1,#&20
 ORRNE  v2,v2,v5,ASL#16
 ORREQ  v2,v2,v6,ASL#16
 STR    v2,[v4],#4


 TST    v1,#&40
 MOVNE  v2,v5
 MOVEQ  v2,v6
 TST    v1,#&80
 ORRNE  v2,v2,v5,ASL#16
 ORREQ  v2,v2,v6,ASL#16

 STR    v2,[v4],a4       ; write char byte

 SUBS   lk,lk,#1
 BNE    lp169045S2

 ADD    a2,a2,#16        ; move right one posn
 SUBS   a3,a3,#4
 BGT    lp169045S1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}




line169045D
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#28

lp169045D1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars00    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#3 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtdblecolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]


 MOV    v4,a2

 MOV    lk,#9

lp169045D2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp169045D2

 ADD    a2,a2,#32        ; move right one posn
 SUBS   a3,a3,#8
 BGT    lp169045D1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}



line169045DT
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#28


lp169045DT1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars18    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#4 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtdblecolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]


 MOV    v4,a2

 MOV    lk,#9

lp169045DT2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],a4



 SUBS   lk,lk,#1
 BNE    lp169045DT2

 ADD    a2,a2,#32        ; move right one posn
 SUBS   a3,a3,#8
 BGT    lp169045DT1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}





line169045DB
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#28


lp169045DB1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars18    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#4 ; point v3 at char
 ADD  v3,v3,v2,ASL#2


 TST  v1,#&F000
 BLNE fancyHIS
 ADD  v3,v3,#9

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtdblecolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]


 MOV    v4,a2

 MOV    lk,#9

lp169045DB2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp169045DB2

 ADD    a2,a2,#32        ; move right one posn
 SUBS   a3,a3,#8
 BGT    lp169045DB1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}




 EXPORT line169045S
 EXPORT line169045D
 EXPORT line169045DT
 EXPORT line169045DB



;****************************************************************************


; a1 pointer to data in memory
; a2 pointer to destination of bit map
; a3 number of characters to output
; a4 width  of sprite in bytes
;
; v1 char word
; v2 temp
; v3 character defn.
; v4 where we write output bytes
; v5 colour
; v6 colour


line329045S
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#28

lp329045S1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars00    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#3 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtcolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]

 MOV    v4,a2

 MOV    lk,#9

lp329045S2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp329045S2

 ADD    a2,a2,#32        ; move right one posn
 SUBS   a3,a3,#8
 BGT    lp329045S1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}



line329045D
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#60

lp329045D1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars00    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#3 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtcolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]

 MOV    v4,a2

 MOV    lk,#9

lp329045D2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp329045D2

 ADD    a2,a2,#64        ; move right one posn
 SUBS   a3,a3,#16
 BGT    lp329045D1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}




line329045DT
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#60


lp329045DT1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars18    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#4 ; point v3 at char
 ADD  v3,v3,v2,ASL#2

 TST  v1,#&F000
 BLNE fancyHIS

 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtcolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]

 MOV    v4,a2

 MOV    lk,#9

lp329045DT2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp329045DT2

 ADD    a2,a2,#64        ; move right one posn
 SUBS   a3,a3,#16
 BGT    lp329045DT1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}



line329045DB
 MOV   ip,sp
 STMFD sp!,{v1-v6,sl,fp,ip,lk,pc}
 SUB   fp,ip,#4

 SUB   a4,a4,#60


lp329045DB1           ; for each character to print to sprite

 LDR  v1,[a1],#4

 AND  v2,v1,#&FF
 AND  v3,v1,#&300
 ORR  v2,v2,v3
                     ; point v3 at start of char tab
 LDR  v3,=chars18    ; 9 bytes per character
 ADD  v3,v3,v2,ASL#4 ; point v3 at char
 ADD  v3,v3,v2,ASL#2


 TST  v1,#&F000
 BLNE fancyHIS
 ADD  v3,v3,#9


 MOV v6,v1,LSR#14    ; background colour
 AND v6,v6,#&3FC

 MOV v5,v1,LSR#22    ; background ^ forground 
 AND v5,v5,#&3FC
 EOR v5,v5,v6        ; forground colour

 LDR v4,=vtcolpal
 LDR v5,[v4,v5]
 LDR v6,[v4,v6]

 MOV    v4,a2

 MOV    lk,#9

lp329045DB2
 LDRB   v1,[v3],#1

 TST    v1,#&01
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&02
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&04
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&08
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&10
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&20
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&40
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],#4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],#4

 TST    v1,#&80
 STRNE  v5,[v4],#4
 STRNE  v5,[v4],a4
 STREQ  v6,[v4],#4
 STREQ  v6,[v4],a4


 SUBS   lk,lk,#1
 BNE    lp329045DB2

 ADD    a2,a2,#64        ; move right one posn
 SUBS   a3,a3,#16
 BGT    lp329045DB1

 LDMEA fp,{v1-v6,sl,fp,sp,pc}


 EXPORT line329045S
 EXPORT line329045D
 EXPORT line329045DT
 EXPORT line329045DB


 END
