mirror of
https://github.com/rzzzwilson/pymlac.git
synced 2025-06-10 09:32:41 +00:00
Slowly getting bugs out of display
This commit is contained in:
parent
6917b1df72
commit
c8f8c295a4
797
vimlac/chars.asm
Executable file
797
vimlac/chars.asm
Executable file
@ -0,0 +1,797 @@
|
||||
;-------------------------------
|
||||
; Test of display processor instructions
|
||||
; Display characters on screen.
|
||||
;-------------------------------
|
||||
org 0100 ;
|
||||
dof ;
|
||||
loop dsn ; wait until display is off
|
||||
jmp .-1 ;
|
||||
ssf ; wait until 40 Hz sync is set
|
||||
jmp .-1 ;
|
||||
scf ;
|
||||
; lda ; get data switches
|
||||
; and hbit ; save only high bit (NOP or HLT)
|
||||
; dac .+1 ; save and ...
|
||||
; nop ; execute
|
||||
law dsub ; start display
|
||||
dla ;
|
||||
don ;
|
||||
; hlt ; DEBUG
|
||||
jmp loop ; keep going
|
||||
hbit data 0100000 ; high bit mask
|
||||
;-------------------------------
|
||||
; Display list subroutine - show all ASCII chars
|
||||
;-------------------------------
|
||||
dsub dsts 1 ;
|
||||
dlxa 020 ;
|
||||
dlya 0200 ;
|
||||
dsts 0 ;
|
||||
djms dlist0 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0160 ;
|
||||
; djms dlist1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0140 ;
|
||||
; djms dlist2 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0120 ;
|
||||
; djms dlist3 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0100 ;
|
||||
; djms dlist4 ;
|
||||
|
||||
; dsts 1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0240 ;
|
||||
; dsts 1 ;
|
||||
; djms dlist0 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0220 ;
|
||||
; djms dlist1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0200 ;
|
||||
; djms dlist2 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0160 ;
|
||||
; djms dlist3 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0140 ;
|
||||
; djms dlist4 ;
|
||||
;
|
||||
; dsts 1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0240 ;
|
||||
; dsts 2 ;
|
||||
; djms dlist0 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0220 ;
|
||||
; djms dlist1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0200 ;
|
||||
; djms dlist2 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0160 ;
|
||||
; djms dlist3 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0140 ;
|
||||
; djms dlist4 ;
|
||||
|
||||
; dsts 1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0300 ;
|
||||
; dsts 3 ;
|
||||
; djms dlist0 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0260 ;
|
||||
; djms dlist1 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0240 ;
|
||||
; djms dlist2 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0220 ;
|
||||
; djms dlist3 ;
|
||||
; dlxa 020 ;
|
||||
; dlya 0200 ;
|
||||
; djms dlist4 ;
|
||||
dhlt ;
|
||||
;-------------------------------
|
||||
; Display list subroutine - show all ASCII chars
|
||||
;-------------------------------
|
||||
dlist0 djms space ; space
|
||||
djms exclam ; !
|
||||
djms dquote ; "
|
||||
djms hash ; #
|
||||
djms dollar ; $
|
||||
djms percent ; %
|
||||
djms amp ; &
|
||||
djms quote ; '
|
||||
djms lparen ; (
|
||||
djms rparen ; )
|
||||
djms star ; *
|
||||
djms plus ; +
|
||||
djms comma ; ,
|
||||
djms minus ; -
|
||||
djms dot ; .
|
||||
djms slash ; /
|
||||
drjm ;
|
||||
dlist1 djms zero ; 0
|
||||
djms one ; 1
|
||||
djms two ; 2
|
||||
djms three ; 3
|
||||
djms four ; 4
|
||||
djms five ; 5
|
||||
djms six ; 6
|
||||
djms seven ; 7
|
||||
djms eight ; 8
|
||||
djms nine ; 9
|
||||
djms colon ; :
|
||||
djms semcol ; ;
|
||||
djms lt ; <
|
||||
djms equal ; =
|
||||
djms gt ; >
|
||||
djms query ; ?
|
||||
djms at ; @
|
||||
drjm ;
|
||||
dlist2 djms uppera ; A
|
||||
djms upperb ; B
|
||||
djms upperc ; C
|
||||
djms upperd ; D
|
||||
djms uppere ; E
|
||||
djms upperf ; F
|
||||
djms upperg ; G
|
||||
djms upperh ; H
|
||||
djms upperi ; I
|
||||
djms upperj ; J
|
||||
djms upperk ; K
|
||||
djms upperl ; L
|
||||
djms upperm ; M
|
||||
djms uppern ; N
|
||||
djms uppero ; O
|
||||
djms upperp ; P
|
||||
djms upperq ; Q
|
||||
djms upperr ; R
|
||||
djms uppers ; S
|
||||
djms uppert ; T
|
||||
djms upperu ; U
|
||||
djms upperv ; V
|
||||
djms upperw ; W
|
||||
djms upperx ; X
|
||||
djms uppery ; Y
|
||||
djms upperz ; Z
|
||||
djms lsquare ; [
|
||||
djms slosh ; \
|
||||
djms rsquare ; ]
|
||||
djms hat ; ^
|
||||
djms unders ; _
|
||||
djms bquote ; `
|
||||
drjm ;
|
||||
dlist3 djms lowera ; a
|
||||
djms lowerb ; b
|
||||
djms lowerc ; c
|
||||
djms lowerd ; d
|
||||
djms lowere ; e
|
||||
djms lowerf ; f
|
||||
djms lowerg ; g
|
||||
djms lowerh ; h
|
||||
djms loweri ; i
|
||||
djms lowerj ; j
|
||||
djms lowerk ; k
|
||||
djms lowerl ; l
|
||||
djms lowerm ; m
|
||||
djms lowern ; n
|
||||
djms lowero ; o
|
||||
djms lowerp ; p
|
||||
djms lowerq ; q
|
||||
djms lowerr ; r
|
||||
djms lowers ; s
|
||||
djms lowert ; t
|
||||
djms loweru ; u
|
||||
djms lowerv ; v
|
||||
djms lowerw ; w
|
||||
djms lowerx ; x
|
||||
djms lowery ; y
|
||||
djms lowerz ; z
|
||||
djms lcurl ; {
|
||||
djms pipe ; |
|
||||
djms rcurl ; }
|
||||
djms tilde ; ~
|
||||
djms del ; DEL
|
||||
djms cursn ;
|
||||
djms curso ;
|
||||
djms nl ;
|
||||
drjm ;
|
||||
dlist4 djms uppert ;
|
||||
djms lowerh ;
|
||||
djms lowere ;
|
||||
djms space ;
|
||||
djms lowerq ;
|
||||
djms loweru ;
|
||||
djms loweri ;
|
||||
djms lowerc ;
|
||||
djms lowerk ;
|
||||
djms space ;
|
||||
djms lowerb ;
|
||||
djms lowerr ;
|
||||
djms lowero ;
|
||||
djms lowerw ;
|
||||
djms lowern ;
|
||||
djms space ;
|
||||
djms lowerf ;
|
||||
djms lowero ;
|
||||
djms lowerx ;
|
||||
djms space ;
|
||||
djms lowerj ;
|
||||
djms loweru ;
|
||||
djms lowerm ;
|
||||
djms lowerp ;
|
||||
djms lowers ;
|
||||
djms space ;
|
||||
djms lowero ;
|
||||
djms lowerv ;
|
||||
djms lowere ;
|
||||
djms lowerr ;
|
||||
djms space ;
|
||||
djms lowert ;
|
||||
djms lowerh ;
|
||||
djms lowere ;
|
||||
djms space ;
|
||||
djms lowerl ;
|
||||
djms lowera ;
|
||||
djms lowerz ;
|
||||
djms lowery ;
|
||||
djms space ;
|
||||
djms lowerd ;
|
||||
djms lowero ;
|
||||
djms lowerg ;
|
||||
djms dot ;
|
||||
drjm ;
|
||||
;-------------------------------
|
||||
; Short vector characters
|
||||
;-------------------------------
|
||||
space inc e,f ; space
|
||||
exclam inc e,d30 ; !
|
||||
inc b00,d02 ;
|
||||
inc b03,02 ;
|
||||
inc b02,f ;
|
||||
dquote inc e,d23 ; "
|
||||
inc 03,b0-1 ;
|
||||
inc -10,01 ;
|
||||
inc 13,d30 ;
|
||||
inc b-1-3,0-1 ;
|
||||
inc 10,01 ;
|
||||
inc f,f ;
|
||||
hash inc e,b13 ; #
|
||||
inc 13,13 ;
|
||||
inc d30,b-1-3 ;
|
||||
inc -1-3,-1-3 ;
|
||||
inc d23,b-30 ;
|
||||
inc -30,d13 ;
|
||||
inc b30,30 ;
|
||||
inc f,f ;
|
||||
dollar inc e,d3-2 ; $
|
||||
inc b03,03 ;
|
||||
inc 03,03 ;
|
||||
inc d3-2,b-30 ;
|
||||
inc -3-2,3-2 ;
|
||||
inc 3-2,-3-2 ;
|
||||
inc -30,f ;
|
||||
percent inc e,d20 ; %
|
||||
inc b13,21 ;
|
||||
inc 1-2,-2-1 ;
|
||||
inc -12,02 ;
|
||||
inc -12,-2-1 ;
|
||||
inc 1-2,21 ;
|
||||
inc 12,12 ;
|
||||
inc f,f ;
|
||||
amp inc e,d30 ; &
|
||||
inc 30,b-33 ;
|
||||
inc -23,12 ;
|
||||
inc 10,1-2 ;
|
||||
inc -2-2,-2-1 ;
|
||||
inc 0-2,2-1 ;
|
||||
inc 20,23 ;
|
||||
inc f,f ;
|
||||
quote inc e,d23 ; '
|
||||
inc 03,b0-1 ;
|
||||
inc 10,01 ;
|
||||
inc -13,f ;
|
||||
lparen inc e,d30 ; (
|
||||
inc b-11,-12 ;
|
||||
inc 02,12 ;
|
||||
inc 11,f ;
|
||||
rparen inc e,d20 ; )
|
||||
inc b11,12 ;
|
||||
inc 02,-12 ;
|
||||
inc -11,f ;
|
||||
star inc e,d03 ; *
|
||||
inc b32,32 ;
|
||||
inc d-31,b0-3 ;
|
||||
inc 0-3,d31 ;
|
||||
inc b-32,-32 ;
|
||||
inc f,f ;
|
||||
plus inc e,d31 ; +
|
||||
inc b03,03 ;
|
||||
inc d-3-3,b30 ;
|
||||
inc 30,f ;
|
||||
comma inc e,d2-2 ; ,
|
||||
inc b13,01 ;
|
||||
inc -10,0-1 ;
|
||||
inc f,f ;
|
||||
minus inc e,d13 ; -
|
||||
inc b30,30 ;
|
||||
inc f,f ;
|
||||
dot inc e,d30 ; .
|
||||
inc b00,f ;
|
||||
slash inc e,d20 ; /
|
||||
inc b13,13 ;
|
||||
inc 13,f ;
|
||||
zero inc e,d12 ; 0
|
||||
inc b02,02 ;
|
||||
inc 22,2-2 ;
|
||||
inc 0-2,0-2 ;
|
||||
inc -2-2,-22 ;
|
||||
inc f,f ;
|
||||
one inc e,d10 ; 1
|
||||
inc b20,20 ;
|
||||
inc d-20,b03 ;
|
||||
inc 03,02 ;
|
||||
inc -2-2,f ;
|
||||
two inc e,d03 ; 2
|
||||
inc 03,b22 ;
|
||||
inc 20,2-2 ;
|
||||
inc -1-2,-2-1 ;
|
||||
inc -3-3,30 ;
|
||||
inc 30,f ;
|
||||
three inc e,b30 ; 3
|
||||
inc 32,-22 ;
|
||||
inc -30,d30 ;
|
||||
inc b22,-22 ;
|
||||
inc -30,f ;
|
||||
four inc e,d30 ; 4
|
||||
inc 10,b03 ;
|
||||
inc 03,02 ;
|
||||
inc -3-3,-1-2 ;
|
||||
inc 30,30 ;
|
||||
inc f,f ;
|
||||
five inc e,b30 ; 5
|
||||
inc 31,02 ;
|
||||
inc -32,-30 ;
|
||||
inc 03,30 ;
|
||||
inc 30,f ;
|
||||
six inc e,d03 ; 6
|
||||
inc b21,20 ;
|
||||
inc 2-2,-2-2 ;
|
||||
inc -20,-22 ;
|
||||
inc 03,23 ;
|
||||
inc 20,2-2 ;
|
||||
inc f,f ;
|
||||
seven inc e,b23 ; 7
|
||||
inc 33,12 ;
|
||||
inc -30,-30 ;
|
||||
inc f,f ;
|
||||
eight inc e,d20 ; 8
|
||||
inc b20,21 ;
|
||||
inc 02,-31 ;
|
||||
inc -32,22 ;
|
||||
inc 20,2-2 ;
|
||||
inc -3-2,-3-1 ;
|
||||
inc 0-2,2-1 ;
|
||||
inc f,f ;
|
||||
nine inc e,d2-1 ; 9
|
||||
inc b23,13 ;
|
||||
inc 03,-30 ;
|
||||
inc -2-2,2-2 ;
|
||||
inc 20,f ;
|
||||
colon inc e,d32 ; :
|
||||
inc b00,d03 ;
|
||||
inc 01,b00 ;
|
||||
inc f,f ;
|
||||
semcol inc e,d2-2 ; ;
|
||||
inc b13,01 ;
|
||||
inc -10,10 ;
|
||||
inc d03,01 ;
|
||||
inc b-10,f ;
|
||||
lt inc e,d31 ; <
|
||||
inc 30,b-21 ;
|
||||
inc -21,-21 ;
|
||||
inc 21,21 ;
|
||||
inc 21,f ;
|
||||
equal inc e,d13 ; =
|
||||
inc b30,30 ;
|
||||
inc d02,b-30 ;
|
||||
inc -30,f ;
|
||||
gt inc e,d01 ; >
|
||||
inc b21,21 ;
|
||||
inc 21,-21 ;
|
||||
inc -21,-21 ;
|
||||
inc f,f ;
|
||||
query inc e,d30 ; ?
|
||||
inc b00,d02 ;
|
||||
inc b02,22 ;
|
||||
inc -12,-20 ;
|
||||
inc -1-2,f ;
|
||||
at inc e,d30 ; @
|
||||
inc b-31,02 ;
|
||||
inc 02,22 ;
|
||||
inc 30,1-3 ;
|
||||
inc -1-2,-30 ;
|
||||
inc 02,20 ;
|
||||
inc 0-2,f ;
|
||||
uppera inc e,b13 ; A
|
||||
inc 13,12 ;
|
||||
inc 1-3,1-3 ;
|
||||
inc 1-2,d-23 ;
|
||||
inc b-30,f ;
|
||||
upperb inc e,b03 ; b
|
||||
inc 03,02 ;
|
||||
inc 30,2-1 ;
|
||||
inc 0-2,-2-1 ;
|
||||
inc -30,d30 ;
|
||||
inc b3-1,0-2 ;
|
||||
inc -3-1,-30 ;
|
||||
inc f,f ;
|
||||
upperc inc e,d32 ; C
|
||||
inc 30,b-2-2 ;
|
||||
inc -20,-22 ;
|
||||
inc 03,23 ;
|
||||
inc 20,2-2 ;
|
||||
inc f,f ;
|
||||
upperd inc e,b03 ; d
|
||||
inc 03,02 ;
|
||||
inc 30,2-1 ;
|
||||
inc 1-2,0-2 ;
|
||||
inc -1-2,-2-1 ;
|
||||
inc -30,f ;
|
||||
uppere inc e,b03 ; E
|
||||
inc 03,02 ;
|
||||
inc 30,30 ;
|
||||
inc d-1-2,-1-2 ;
|
||||
inc b-20,-20 ;
|
||||
inc d0-2,0-2 ;
|
||||
inc b30,30 ;
|
||||
inc f,f ;
|
||||
upperf inc e,b03 ; F
|
||||
inc 02,30 ;
|
||||
inc d-30,b03 ;
|
||||
inc 30,30 ;
|
||||
inc f,f ;
|
||||
upperg inc e,d33 ; G
|
||||
inc b30,-1-3 ;
|
||||
inc -30,-23 ;
|
||||
inc 03,32 ;
|
||||
inc 3-1,f ;
|
||||
upperh inc e,b03 ; H
|
||||
inc 03,02 ;
|
||||
inc d0-3,0-1 ;
|
||||
inc b30,30 ;
|
||||
inc y,b03 ;
|
||||
inc 03,02 ;
|
||||
inc y,f ;
|
||||
upperi inc e,b30 ; I
|
||||
inc 30,d-31 ;
|
||||
inc b03,03 ;
|
||||
inc d-31,b30 ;
|
||||
inc 30,f ;
|
||||
upperj inc e,d02 ; J
|
||||
inc b2-2,20 ;
|
||||
inc 22,03 ;
|
||||
inc 03,f ;
|
||||
upperk inc e,b03 ; K
|
||||
inc 03,02 ;
|
||||
inc d0-3,0-1 ;
|
||||
inc b32,32 ;
|
||||
inc y,b-13 ;
|
||||
inc -23,f ;
|
||||
upperl inc e,b03 ; L
|
||||
inc 03,02 ;
|
||||
inc y,b30 ;
|
||||
inc 30,f ;
|
||||
upperm inc e,b03 ; M
|
||||
inc 03,02 ;
|
||||
inc 3-3,33 ;
|
||||
inc 0-3,0-3 ;
|
||||
inc 0-2,f ;
|
||||
uppern inc e,b03 ; N
|
||||
inc 03,02 ;
|
||||
inc 2-3,2-3 ;
|
||||
inc 2-2,03 ;
|
||||
inc 03,02 ;
|
||||
inc f,f ;
|
||||
uppero inc e,d10 ; O
|
||||
inc b20,20 ;
|
||||
inc 13,02 ;
|
||||
inc -13,-20 ;
|
||||
inc -20,-1-3 ;
|
||||
inc 0-2,1-3 ;
|
||||
inc f,f ;
|
||||
upperp inc e,b03 ; P
|
||||
inc 03,02 ;
|
||||
inc 30,3-1 ;
|
||||
inc 0-2,-3-1 ;
|
||||
inc -30,f ;
|
||||
upperq inc e,d10 ; Q
|
||||
inc b30,23 ;
|
||||
inc 03,-12 ;
|
||||
inc -30,-2-3 ;
|
||||
inc 0-3,1-2 ;
|
||||
inc d33,b3-3 ;
|
||||
inc f,f ;
|
||||
upperr inc e,b03 ; R
|
||||
inc 03,02 ;
|
||||
inc 30,3-1 ;
|
||||
inc 0-2,-3-1 ;
|
||||
inc -30,d30 ;
|
||||
inc b2-2,1-2 ;
|
||||
inc f,f ;
|
||||
uppers inc e,d01 ; S
|
||||
inc b2-1,30 ;
|
||||
inc 13,-31 ;
|
||||
inc -31,13 ;
|
||||
inc 30,2-1 ;
|
||||
inc f,f ;
|
||||
uppert inc e,d30 ; T
|
||||
inc b03,03 ;
|
||||
inc 02,x ;
|
||||
inc b30,30 ;
|
||||
inc f,f ;
|
||||
upperu inc e,d03 ; U
|
||||
inc 03,02 ;
|
||||
inc b0-3,0-3 ;
|
||||
inc 2-2,20 ;
|
||||
inc 22,03 ;
|
||||
inc 03,f ;
|
||||
upperv inc e,d03 ; V
|
||||
inc 03,02 ;
|
||||
inc b1-2,1-3 ;
|
||||
inc 1-3,12 ;
|
||||
inc 13,13 ;
|
||||
inc f,f ;
|
||||
upperw inc e,b03 ; W
|
||||
inc 03,02 ;
|
||||
inc y,b33 ;
|
||||
inc 3-3,03 ;
|
||||
inc 03,02 ;
|
||||
inc f,f ;
|
||||
upperx inc e,b23 ; X
|
||||
inc 22,23 ;
|
||||
inc y,b-23 ;
|
||||
inc -22,-23 ;
|
||||
inc f,f ;
|
||||
uppery inc e,d30 ; Y
|
||||
inc b02,03 ;
|
||||
inc 33,x ;
|
||||
inc b3-3,f ;
|
||||
upperz inc e,d30 ; Z
|
||||
inc 30,b-30 ;
|
||||
inc -30,23 ;
|
||||
inc 22,23 ;
|
||||
inc -30,-30 ;
|
||||
inc f,f ;
|
||||
lsquare inc e,d30 ; [
|
||||
inc 10,b-20 ;
|
||||
inc 03,03 ;
|
||||
inc 02,20 ;
|
||||
inc f,f ;
|
||||
slosh inc e,d30 ; \
|
||||
inc 10,b-13 ;
|
||||
inc -13,-12 ;
|
||||
inc f,f ;
|
||||
rsquare inc e,d20 ; ]
|
||||
inc b20,03 ;
|
||||
inc 03,02 ;
|
||||
inc -20,f ;
|
||||
hat inc e,d30 ; ^
|
||||
inc b03,03 ;
|
||||
inc 02,-1-2 ;
|
||||
inc -2-2,31 ;
|
||||
inc 3-1,-22 ;
|
||||
inc -12,f ;
|
||||
unders inc e,d-2-2 ; _
|
||||
inc b30,30 ;
|
||||
inc 20,20 ;
|
||||
inc d-23,f ;
|
||||
bquote inc e,d13 ; `
|
||||
inc 03,b-22 ;
|
||||
inc f,f ;
|
||||
lowera inc e,d03 ; a
|
||||
inc 03,b30 ;
|
||||
inc 2-2,-1-3 ;
|
||||
inc 2-1,d-21 ;
|
||||
inc b-3-1,-12 ;
|
||||
inc 21,20 ;
|
||||
inc f,f ;
|
||||
lowerb inc e,b03 ; b
|
||||
inc 03,03 ;
|
||||
inc y,d02 ;
|
||||
inc b3-2,21 ;
|
||||
inc 03,-22 ;
|
||||
inc -3-2,f ;
|
||||
lowerc inc e,d32 ; c
|
||||
inc 20,b-2-2 ;
|
||||
inc -20,-12 ;
|
||||
inc 02,22 ;
|
||||
inc 3-1,f ;
|
||||
lowerd inc e,d33 ; d
|
||||
inc 21,b-32 ;
|
||||
inc -2-2,0-3 ;
|
||||
inc 2-1,32 ;
|
||||
inc d0-2,b03 ;
|
||||
inc 03,03 ;
|
||||
inc f,f ;
|
||||
lowere inc e,d13 ; e
|
||||
inc b20,20 ;
|
||||
inc -23,-20 ;
|
||||
inc -1-2,0-3 ;
|
||||
inc 2-1,30 ;
|
||||
inc f,f ;
|
||||
lowerf inc e,d20 ; f
|
||||
inc b03,03 ;
|
||||
inc 22,2-1 ;
|
||||
inc d-1-2,b-30 ;
|
||||
inc -20,f ;
|
||||
lowerg inc e,d0-2 ; g
|
||||
inc b3-1,22 ;
|
||||
inc 02,03 ;
|
||||
inc -32,-2-2 ;
|
||||
inc 0-3,2-1 ;
|
||||
inc 32,f ;
|
||||
lowerh inc e,b03 ; h
|
||||
inc 03,03 ;
|
||||
inc d1-3,b20 ;
|
||||
inc 1-3,0-3 ;
|
||||
inc f,f ;
|
||||
loweri inc e,d30 ; i
|
||||
inc b03,03 ;
|
||||
inc d02,b00 ;
|
||||
inc f,f ;
|
||||
lowerj inc e,b1-2 ; j
|
||||
inc 20,12 ;
|
||||
inc 03,03 ;
|
||||
inc d02,b00 ;
|
||||
inc f,f ;
|
||||
lowerk inc e,b03 ; k
|
||||
inc 03,03 ;
|
||||
inc d3-2,b-3-3 ;
|
||||
inc 3-1,2-3 ;
|
||||
inc f,f ;
|
||||
lowerl inc e,d30 ; l
|
||||
inc b-11,03 ;
|
||||
inc 02,02 ;
|
||||
inc f,f ;
|
||||
lowerm inc e,b03 ; m
|
||||
inc 03,d0-2 ;
|
||||
inc b22,1-2 ;
|
||||
inc 22,1-2 ;
|
||||
inc 0-2,0-2 ;
|
||||
inc d-30,b03 ;
|
||||
inc f,f ;
|
||||
lowern inc e,b03 ; n
|
||||
inc 03,d0-2 ;
|
||||
inc b32,2-3 ;
|
||||
inc 0-3,f ;
|
||||
lowero inc e,d10 ; o
|
||||
inc b20,22 ;
|
||||
inc 02,-12 ;
|
||||
inc -20,-2-2 ;
|
||||
inc 0-2,1-2 ;
|
||||
inc f,f ;
|
||||
lowerp inc e,d0-2 ; p
|
||||
inc b03,03 ;
|
||||
inc 03,d0-1 ;
|
||||
inc b30,1-2 ;
|
||||
inc -1-2,-30 ;
|
||||
inc f,f ;
|
||||
lowerq inc e,d32 ; q
|
||||
inc 20,b-3-2 ;
|
||||
inc -21,03 ;
|
||||
inc 22,3-2 ;
|
||||
inc 0-3,0-2 ;
|
||||
inc 0-2,a0173 ;
|
||||
lowerr inc e,b03 ; r
|
||||
inc 03,d0-3 ;
|
||||
inc b22,31 ;
|
||||
inc f,f ;
|
||||
lowers inc e,d01 ; s
|
||||
inc b3-1,22 ;
|
||||
inc -21,-31 ;
|
||||
inc 22,3-1 ;
|
||||
inc f,f ;
|
||||
lowert inc e,d30 ; t
|
||||
inc b-11,03 ;
|
||||
inc 02,02 ;
|
||||
inc d-2-2,b20 ;
|
||||
inc 20,f ;
|
||||
loweru inc e,d03 ; u
|
||||
inc 03,b0-2 ;
|
||||
inc 0-2,1-2 ;
|
||||
inc 20,22 ;
|
||||
inc 02,02 ;
|
||||
inc y,d02 ;
|
||||
inc b1-2,f ;
|
||||
lowerv inc e,d03 ; v
|
||||
inc 03,b2-3 ;
|
||||
inc 1-3,13 ;
|
||||
inc 13,f ;
|
||||
lowerw inc e,d03 ; w
|
||||
inc 03,b1-3 ;
|
||||
inc 1-3,13 ;
|
||||
inc 1-3,1+3 ;
|
||||
inc 13,f ;
|
||||
lowerx inc e,b23 ; x
|
||||
inc 33,d-20 ;
|
||||
inc -30,b3-3 ;
|
||||
inc 2-3,f ;
|
||||
lowery inc e,d1-3 ; y
|
||||
inc b23,23 ;
|
||||
inc 03,x ;
|
||||
inc b1-3,2-3 ;
|
||||
inc f,f ;
|
||||
lowerz inc e,b30 ; z
|
||||
inc 20,a011 ;
|
||||
inc b23,33 ;
|
||||
inc -30,-20 ;
|
||||
inc f,f ;
|
||||
lcurl inc e,d33 ; {
|
||||
inc 03,b-20 ;
|
||||
inc 1-3,-10 ;
|
||||
inc d10,b-1-3 ;
|
||||
inc 20,f ;
|
||||
pipe inc e,d33 ; |
|
||||
inc 03,01 ;
|
||||
inc b0-3,d0-2 ;
|
||||
inc b0-3,a0173 ;
|
||||
rcurl inc e,d13 ; }
|
||||
inc 03,b20 ;
|
||||
inc -1-3,10 ;
|
||||
inc d-10,b1-3 ;
|
||||
inc -20,f ;
|
||||
tilde inc e,d03 ; ~
|
||||
inc b12,1-2 ;
|
||||
inc 1-2,12 ;
|
||||
inc f,f ;
|
||||
del inc e,b+0+3 ; DEL (filled box)
|
||||
inc b+0+3,b+1+0 ;
|
||||
inc b+0-3,b+0-3 ;
|
||||
inc b+1+0,b+0+3 ;
|
||||
inc b+0+3,b+1+0 ;
|
||||
inc b+0-3,b+0-3 ;
|
||||
inc b+1+0,b+0+3 ;
|
||||
inc b+0+3,f ;
|
||||
cursn inc e,b03 ; cursor on
|
||||
inc 03,30 ;
|
||||
inc 30,0-3 ;
|
||||
inc 0-3,-30 ;
|
||||
inc -30,d11 ;
|
||||
inc b02,02 ;
|
||||
inc 20,20 ;
|
||||
inc 0-2,0-2 ;
|
||||
inc -30,03 ;
|
||||
inc 20,0-2 ;
|
||||
inc -10,01 ;
|
||||
inc f,f ;
|
||||
curso inc e,b03 ; cursor off
|
||||
inc 03,30 ;
|
||||
inc 30,0-3 ;
|
||||
inc 0-3,-30 ;
|
||||
inc -30,f ;
|
||||
nlx inc e,d12 ; newline
|
||||
inc b03,3-3 ;
|
||||
inc 03,d2-2 ;
|
||||
inc b0-3,30 ;
|
||||
inc f,f ;
|
||||
nl inc e,d12 ; newline
|
||||
inc b03,2-3 ;
|
||||
inc 03,d0-3 ;
|
||||
inc b0-1,20 ;
|
||||
inc d1-1,b03 ;
|
||||
inc 03,-30 ;
|
||||
inc -30,0-3 ;
|
||||
inc 0-3,30 ;
|
||||
inc 30,f ;
|
||||
nl2 inc e,d33 ; newline
|
||||
inc b0-2,-1-2 ;
|
||||
inc -2-2,02 ;
|
||||
inc d0-2,b20 ;
|
||||
inc f,f ;
|
||||
;-------------------------------
|
||||
end
|
||||
@ -961,7 +961,7 @@ i_SSF(void)
|
||||
if (cpu_sync_on)
|
||||
r_PC = (r_PC + 1) & WORD_MASK;
|
||||
|
||||
trace_cpu("SSF\t");
|
||||
trace_cpu("SSF");
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -979,7 +979,7 @@ i_SSN(void)
|
||||
if (!cpu_sync_on)
|
||||
r_PC = (r_PC + 1) & WORD_MASK;
|
||||
|
||||
trace_cpu("SSN\t");
|
||||
trace_cpu("SSN");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
#include "dcpu.h"
|
||||
#include "memory.h"
|
||||
#include "display_pbm.h"
|
||||
#include "log.h"
|
||||
#include "trace.h"
|
||||
|
||||
|
||||
@ -58,7 +59,7 @@ int DIB = 0; // ????
|
||||
static BYTE Mode = MODE_NORMAL; // DEIM mode
|
||||
static bool Running = false; // true if display processor is running
|
||||
|
||||
static char DEIM_result[10]; // holds DEIM_decode() result
|
||||
static char DEIM_result[100]; // holds DEIM_decode() result
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -201,6 +202,7 @@ Description : Execute a DEIM instruction byte.
|
||||
static
|
||||
char *doDEIMByte(BYTE byte, bool last)
|
||||
{
|
||||
vlog("doDEIMByte: entered, last=%s", last ? "true" : "false");
|
||||
|
||||
char *trace = DEIMdecode(byte);
|
||||
|
||||
@ -214,6 +216,7 @@ char *doDEIMByte(BYTE byte, bool last)
|
||||
|
||||
if (byte & 0x20) // get dx sign and move X
|
||||
{
|
||||
vlog("doDEIMByte: -x move");
|
||||
DX -= dx * DScale;
|
||||
}
|
||||
else
|
||||
@ -223,6 +226,7 @@ char *doDEIMByte(BYTE byte, bool last)
|
||||
|
||||
if (byte & 0x04) // get dy sign and move Y
|
||||
{
|
||||
vlog("doDEIMByte: -y move");
|
||||
DY -= dy * DScale;
|
||||
}
|
||||
else
|
||||
@ -273,6 +277,8 @@ char *doDEIMByte(BYTE byte, bool last)
|
||||
}
|
||||
}
|
||||
|
||||
vlog("doDEIMByte: finished, trace='%s'", trace);
|
||||
|
||||
return trace;
|
||||
}
|
||||
|
||||
@ -303,8 +309,12 @@ int i_DDYM(void)
|
||||
static
|
||||
int i_DEIM(WORD address)
|
||||
{
|
||||
vlog("i_DEIM: entered");
|
||||
|
||||
Mode = MODE_DEIM;
|
||||
vlog("i_DEIM: just before doDEIMByte+trace_dcpu");
|
||||
trace_dcpu("DEIM %s", doDEIMByte(address & 0377, true));
|
||||
vlog("i_DEIM: returning 1");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -365,14 +375,16 @@ int i_DJMS(WORD address)
|
||||
static
|
||||
int i_DLXA(WORD address)
|
||||
{
|
||||
DX = (address & BITS10) << 1;
|
||||
//DX = (address & BITS10) << 1;
|
||||
DX = address & BITS10;
|
||||
trace_dcpu("DLXA %04o", address);
|
||||
return 1;
|
||||
}
|
||||
static
|
||||
int i_DLYA(WORD address)
|
||||
{
|
||||
DY = (address & BITS10) << 1;
|
||||
//DY = (address & BITS10) << 1;
|
||||
DY = address & BITS10;
|
||||
trace_dcpu("DLYA %04o", address);
|
||||
return 1;
|
||||
}
|
||||
@ -520,6 +532,8 @@ Description : Function to execute one display processor instruction.
|
||||
int
|
||||
dcpu_execute_one(void)
|
||||
{
|
||||
vlog("dcpu_execute_one: entered");
|
||||
|
||||
if (!Running)
|
||||
{
|
||||
return 0;
|
||||
@ -532,14 +546,20 @@ dcpu_execute_one(void)
|
||||
|
||||
if (Mode == MODE_DEIM)
|
||||
{
|
||||
char *tracestr = doDEIMByte(instruction >> 8, false);
|
||||
static char tmp_buff[100];
|
||||
|
||||
strcpy(tmp_buff, doDEIMByte(instruction >> 8, false));
|
||||
vlog("dcpu_execute_one: after first doDEIMByte()");
|
||||
|
||||
if (Mode == MODE_DEIM)
|
||||
{
|
||||
strcat(tracestr, ",");
|
||||
strcat(tracestr, doDEIMByte(instruction & 0xff, true));
|
||||
strcat(tmp_buff, ",");
|
||||
strcat(tmp_buff, doDEIMByte(instruction & 0xff, true));
|
||||
vlog("dcpu_execute_one: after second doDEIMByte()");
|
||||
}
|
||||
trace_dcpu("INC %s", tracestr);
|
||||
|
||||
trace_dcpu("INC %s", tmp_buff);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -560,7 +580,10 @@ dcpu_execute_one(void)
|
||||
}
|
||||
else if (opcode == 003)
|
||||
{
|
||||
return i_DEIM(address);
|
||||
vlog("dcpu_execute_one: calling i_DEIM()");
|
||||
int result = i_DEIM(address);
|
||||
vlog("dcpu_execute_one: returning %d", result);
|
||||
return result;
|
||||
}
|
||||
else if (opcode == 004)
|
||||
{
|
||||
|
||||
@ -24,18 +24,27 @@
|
||||
* State variables for the display
|
||||
******/
|
||||
|
||||
static char *pbm_display; // pointer to display array of chars
|
||||
static BYTE *pbm_display; // pointer to display array of chars
|
||||
static bool pbm_running = false; // true if display is ON
|
||||
static int pbm_cyclecount = 0; // number of cycles for one instruction execution
|
||||
static int pbm_sync40 = 0; // counter for 40Hz flag
|
||||
static int pbm_file_num = 0; // number of next PBM file to write
|
||||
static bool pbm_dirty = false; // 'true' if buffer unsaved
|
||||
|
||||
|
||||
bool
|
||||
display_dirty(void)
|
||||
{
|
||||
return pbm_dirty;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
display_reset(void)
|
||||
{
|
||||
for (int i = 0; i < SCALE_MAX_X * SCALE_MAX_Y; ++i)
|
||||
pbm_display[i] = 0;
|
||||
vlog("Max display cell is at %d", SCALE_MAX_X * SCALE_MAX_Y -1);
|
||||
|
||||
// set internal state
|
||||
pbm_running = 0;
|
||||
@ -49,13 +58,17 @@ display_reset(void)
|
||||
void
|
||||
display_init(void)
|
||||
{
|
||||
pbm_display = (char *) malloc(sizeof(bool) * SCALE_MAX_X * SCALE_MAX_Y);
|
||||
pbm_display = malloc(sizeof(BYTE) * SCALE_MAX_X * SCALE_MAX_Y);
|
||||
display_reset();
|
||||
|
||||
vlog("display_init: done");
|
||||
}
|
||||
|
||||
void
|
||||
display_write(void)
|
||||
{
|
||||
vlog("display_write:");
|
||||
|
||||
char fname[1024];
|
||||
|
||||
pbm_file_num += 1;
|
||||
@ -70,6 +83,8 @@ display_write(void)
|
||||
fclose(fd);
|
||||
|
||||
pbm_dirty = false;
|
||||
|
||||
vlog("display_write: done");
|
||||
}
|
||||
|
||||
|
||||
@ -88,13 +103,15 @@ void
|
||||
//draw(int x1, int y1, int x2, int y2, dotted=False)
|
||||
display_draw(int x1, int y1, int x2, int y2)
|
||||
{
|
||||
// convert virtual coords to physical
|
||||
x1 /= 2;
|
||||
y1 /= 2;
|
||||
x2 /= 2;
|
||||
y2 /= 2;
|
||||
vlog("display_draw: x1=%d, y1=%d, x2=%d, y2=%d", x1, y1, x2, y2);
|
||||
|
||||
// invert the Y axis
|
||||
// // convert virtual coords to physical
|
||||
// x1 /= 2;
|
||||
// y1 /= 2;
|
||||
// x2 /= 2;
|
||||
// y2 /= 2;
|
||||
|
||||
// invert the Y axes
|
||||
y1 = SCALE_MAX_Y - y1;
|
||||
y2 = SCALE_MAX_Y - y2;
|
||||
|
||||
@ -113,7 +130,8 @@ display_draw(int x1, int y1, int x2, int y2)
|
||||
else
|
||||
s2 = -1;
|
||||
bool swap = false;
|
||||
pbm_display[(y-1)*SCALE_MAX_X + x - 1] = 1;
|
||||
// vlog("display_draw: setting pixel (%d,%d)", x, y);
|
||||
// pbm_display[(y-1)*SCALE_MAX_X + (x-1)] = 1;
|
||||
if (dy > dx)
|
||||
{
|
||||
int temp = dx;
|
||||
@ -125,6 +143,7 @@ display_draw(int x1, int y1, int x2, int y2)
|
||||
int p = 2*dy - dx;
|
||||
for (int i = 0; i < dx; ++i)
|
||||
{
|
||||
vlog("display_draw: setting pixel (%d,%d)", x, y);
|
||||
pbm_display[(y-1)*SCALE_MAX_X + x - 1] = 1 ;
|
||||
while (p >= 0)
|
||||
{
|
||||
@ -141,7 +160,13 @@ display_draw(int x1, int y1, int x2, int y2)
|
||||
x += s1;
|
||||
}
|
||||
|
||||
// draw the final point
|
||||
vlog("display_draw: setting pixel (%d,%d)", x, y);
|
||||
pbm_display[(y-1)*SCALE_MAX_X + x - 1] = 1 ;
|
||||
|
||||
pbm_dirty = true;
|
||||
|
||||
vlog("display_draw: finished");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -12,6 +12,7 @@ void display_write(void);
|
||||
void display_draw(int x1, int y1, int x2, int y2);
|
||||
void display_clear(void);
|
||||
void display_close(void);
|
||||
bool display_dirty(void);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -86,9 +86,20 @@ ptr_mount(char *fname)
|
||||
device_cycle_count = PTR_NOT_PTR_READY_CYCLES;
|
||||
device_use = InUsePTR;
|
||||
|
||||
vlog("ptr_mount: PTR_CHARS_PER_SECOND=%d", PTR_CHARS_PER_SECOND);
|
||||
vlog("ptr_mount: PTR_CYCLES_PER_CHAR=(CPU_HERZ / PTR_CHARS_PER_SECOND)=%d/%d=%d",
|
||||
CPU_HERZ, PTR_CHARS_PER_SECOND, PTR_CYCLES_PER_CHAR);
|
||||
vlog("ptr_mount: PTR_READY_CYCLES=%d", PTR_READY_CYCLES);
|
||||
vlog("ptr_mount: PTR_NOT_PTR_READY_CYCLES=%d", PTR_NOT_PTR_READY_CYCLES);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// #define PTR_CHARS_PER_SECOND 300
|
||||
// #define PTR_CYCLES_PER_CHAR (CPU_HERZ / PTR_CHARS_PER_SECOND)
|
||||
// #define PTR_READY_CYCLES (int)((3 * PTR_CYCLES_PER_CHAR) / 10)
|
||||
// #define PTR_NOT_PTR_READY_CYCLES (int)((7 * PTR_CYCLES_PER_CHAR) / 10)
|
||||
|
||||
|
||||
void
|
||||
ptr_dismount(void)
|
||||
|
||||
57
vimlac/simpledisplay.asm
Executable file
57
vimlac/simpledisplay.asm
Executable file
@ -0,0 +1,57 @@
|
||||
org 0100
|
||||
|
||||
dof ; turn display off
|
||||
wdoff dsn ;
|
||||
jmp wdoff ; wait until display off
|
||||
;w40hz ssf ;
|
||||
; jmp w40hz ; wait for 40Hz synch
|
||||
scf ;
|
||||
law hello ; start display
|
||||
dla ;
|
||||
don ;
|
||||
jmp wdoff ;
|
||||
|
||||
hbit data 0100000
|
||||
|
||||
hello dlxa 0100
|
||||
dlya 0100
|
||||
dsts 2
|
||||
dhvc
|
||||
djms upperh
|
||||
djms uppere
|
||||
djms upperl
|
||||
djms upperl
|
||||
djms uppero
|
||||
dhlt
|
||||
|
||||
upperh inc e,b03 ; H
|
||||
inc 03,02 ;
|
||||
inc d0-3,0-1 ;
|
||||
inc b30,30 ;
|
||||
inc Y,b03 ;
|
||||
inc 03,02 ;
|
||||
inc Y,f ;
|
||||
|
||||
uppere inc e,b03 ; E
|
||||
inc 03,02 ;
|
||||
inc 30,30 ;
|
||||
inc d-1-2,-1-2 ;
|
||||
inc b-20,-20 ;
|
||||
inc d0-2,0-2 ;
|
||||
inc b30,30 ;
|
||||
inc f,f ;
|
||||
|
||||
upperl inc e,b03 ; L
|
||||
inc 03,02 ;
|
||||
inc Y,b30 ;
|
||||
inc 30,f ;
|
||||
|
||||
uppero inc e,d10 ; O
|
||||
inc b20,20 ;
|
||||
inc 13,02 ;
|
||||
inc -13,-20 ;
|
||||
inc -20,-1-3 ;
|
||||
inc 0-2,1-3 ;
|
||||
inc f,f ;
|
||||
|
||||
end
|
||||
@ -96,7 +96,7 @@ trace_regs(void)
|
||||
if (TraceFlag != false)
|
||||
{
|
||||
sprintf(CPU_reg_trace, "AC=%06.6o L=%1.1o", cpu_get_AC(), cpu_get_L());
|
||||
vlog(CPU_reg_trace);
|
||||
// vlog(CPU_reg_trace);
|
||||
}
|
||||
}
|
||||
|
||||
@ -153,6 +153,8 @@ Description : printf()-style trace routine for the display CPU.
|
||||
void
|
||||
trace_dcpu(char *fmt, ...)
|
||||
{
|
||||
vlog("trace_dcpu: entered");
|
||||
|
||||
TraceFlag = true; // DEBUG
|
||||
|
||||
if (TraceFlag != false)
|
||||
@ -165,5 +167,7 @@ trace_dcpu(char *fmt, ...)
|
||||
|
||||
trace_dregs();
|
||||
}
|
||||
|
||||
vlog("trace_dcpu: exit");
|
||||
}
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
#include "bootstrap.h"
|
||||
#include "memory.h"
|
||||
#include "ptrptp.h"
|
||||
#include "display_pbm.h"
|
||||
#include "cpu.h"
|
||||
#include "dcpu.h"
|
||||
#include "trace.h"
|
||||
@ -112,6 +113,7 @@ str2int(char *s)
|
||||
void
|
||||
run(WORD pc)
|
||||
{
|
||||
display_init();
|
||||
cpu_set_PC(pc);
|
||||
cpu_start();
|
||||
trace_open();
|
||||
@ -130,6 +132,9 @@ run(WORD pc)
|
||||
// ttyin_tick(cycles);
|
||||
|
||||
trace_end_line();
|
||||
|
||||
if (!dcpu_running() && display_dirty())
|
||||
display_write();
|
||||
}
|
||||
|
||||
trace_close();
|
||||
|
||||
@ -22,7 +22,8 @@ typedef unsigned char BYTE;
|
||||
|
||||
#define MEMORY_SIZE 04000
|
||||
|
||||
#define CPU_HERZ 1800000
|
||||
// number of machine cycles per second (1000000 / 1.8us)
|
||||
#define CPU_HERZ 55555
|
||||
#define MEMMASK 0xffff
|
||||
#define HIGHBITMASK 0x8000
|
||||
#define WORD_MASK 0xffff
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user