.deviceаааа AT90S8535
.include
"c:\avr\appnotes\8535def.inc" ; This stuff defines name for ports
etc.
;
********************************************************************
;
Video.asm
;
;аааа WARNING:- I know the code is messy.... this
is FREE !!!
;
;аааа This code was written by Ingmar Meins
(intello@ozemail.com.au).
;аааа All the video code is original none was
"borrowed" from other
;аааа authors. The wait macro is as provided with
the AVRA assembler.
;
;аааа You are free to use any portion of this
code in any NON-COMMERCIAL
;аааа project. If you have a commercial use for
the code then please
;аааа contact me first. Either way, if you use it
drop me a line, kind of
;аааа an electronic postcard or something !!
;
;аааа If this code goes wild, your monitor burns
up and burns the house
;аааа down don't call me, this isn't America. I
take no responsibility
;аааа for the use/abuse of this software.
;
;аааа These are a collection of video routines
for the AT90S8535 chip.
;аааа This code is written for an 8MHz clock
speed. The video signal
;аааа meets (as closely as possible) the PAL 625
standard.
;
;аааа There are individual routines to do the
vertical sync and pre/post
;аааа eq pulses but the same video routine is
called for both fields.
;
;аааа The active area of the screen which is
available to you consists
;аааа of about 290 lines in the DoVideo routine.
;
;аааа There are all sorts of bits of garbage code
in here that may not be
;аааа used at the moment. Clean up what you need
to keep. I'll get around
;аааа to it too but not in this release.
;
;
*********************************************************************
;
;
Revisions:
;
;
*********************************************************************
;
; IO
Definitions...
;
;аааа Port C used for video output stuff. Only
B/W no gray.
;
;аааа Bit 7 -аааа Video
;
;аааа Port D used for sync output stuff.
;
;аааа Bit 6 - Video
;
; This
is the video output circuit...
;
;ааааааааааааааааааааааааааааааааа а 560
;аааа ---bit 7 port C------/\/\/\------+
;ааааааааааааааааааааааааааааааааа а 1200ааааааааааа
|
;аа ---bit 6 port
D------/\/\/\------+------video out
;ааааааааааааааааааааааааааааааааа аа 100ааааааааааа
|
;а а---GND---------------/\/\/\------+
;
;
==========================================================
;аааа MACROS....
;
==========================================================
;
.macro syncL
ааааа cbiаа PORTD,bsync
.endmacro
.macro syncH
ааааа sbiаа PORTD,bsync
.endmacro
.macro vidH
ааааа sbiаа PORTC,bvid
.endmacro
.macro vidL
ааааа cbiаа PORTC,bvid
.endmacro
; Inline delay between 0 to 765 cycles.
; Will use maximum 5 program words.
;
; Syntax:
; wait <number of cycles>, <register to use for
count>
;
.macro wait
.if @0 > 765
.error "Wait macro: Too high wait value!"
.endif
.if @0 < 3
.if @0 >= 1
ааааааа nop
.if @0 >= 2
ааааааа nop
.endif
.endif
.else
ааааааа ldiаааа @1, @0 / 3
waitloop:
ааааааа decаааа @1
ааааааа brneааа waitloop
.if (@0 % 3) >= 1
ааааааа nop
.if (@0 % 3) >= 2
ааааааа nop
.endif
.endif
.endif
.endmacro
;
;аааа =========================================================
;
.dseg
;
.equа TRUE =$FF ;Yes
.equ FALSE =$00 ;No
;
.equ XTAL = 8000000
.equа BAUDRATE = 51аааа ; 9600.
;
; Timing definitions in clock cycles. These form the BASE
figures
; which get molested in the video routines.
;
.equа HPOS = -10ааааааа ; Determines the horizontal position of
the active video.
.equа PXH = 3аааааааааааааааа ; Pixel height in scan lines.
.equа FP = 12аааааааааааааааа ; Front porch.
.equа HS = 36аааааааааааааааа ; Horizontal sync.
.equа VT = 410ааааааааа ; Active picture area in each line.
.equа BP = 47аааааааааааааааа ; Back porch (after HS before
VT).
;
; Vertical sync and eq pulses.
;ааааааааааааааааааааааааааааааааа vsp
.equа VS = 216ааааааааа ;а
-+ааааа +-+а vsа +-+
.equа VSP = 33ааааааааа ;аа
|______| |______| |__
;
.equа PE = 231ааааааааа ;а
+-+ +------+ +------
.equа PEP = 18ааааааааа ;ааа
|_|ааааа |_|
;
.equа bvid = 7ааааааааа ; bit 6 of portc is video
.equа bsync = 6аааааааа ; bit 7 of portc is sync
;
; *********************
;аааа ASCII
Equivalents
; *********************
;
.equ LF=$0A ;Line
Feed
.equ CR=$0D
;Carriage Return
;
;
; *****************************
;аааа Usage summary
of registers.
; *****************************
;
; R1 -
; R2 -
; R3 -
; R4 -
; R5 -
; R6 -
; R7 -
; R8 -
; R9 -
; R10 -
; R11 -
; R12 -
; R13 -
; R14 -
; R15 -
; R16 - TEMP1
; R17 - TEMP2
; R18 - Param1 - To pass parameters to subroutines.
; R19 - Stat - general status bits.
; R20 - FldCnt - field counter.
; R21 - TEMP3
; R22 - TEMP4
; R23 -
; R24 -
; R25 -
; R26 - XL - X register
; R27 - XH
; R28 - YL - Y register
; R29 - YL
; R30 - ZL - Z register
; R31 - ZH
;
.def TEMP1 =аааа R16
.def TEMP2 =аааа R17
.def Param1 = R18
.defа Stat = R19
;аааааааааа Bit 7 =
0 odd field, 1 even field.
;аааааааааа Bit 6
;аааааааааа Bit 5
;аааааааааа Bit 4
;аааааааааа Bit 3
;аааааааааа Bit 2
;аааааааааа Bit 1
;аааааааааа Bit 0
.defа FldCnt = R20ааааааааааа ; Field count for real time clock.
.defа TEMP3 = R21
.defа TEMP4 = R22
.def XL =R26
.def XH =R27
.def YL =R28
.def YH =R29
.def ZL =R30
.def ZH =R31
; ****************************************************
; Now we define the names for specific SRAM locations.
; ****************************************************
.orgа 0x60
Vram:
ааааааааааа .byte 320аааааааа ;
Video Ram. ie. 40 by 8 bytes.
; Real time clock variables.
Seconds:
ааааааааааа .byte 1аааааааааа ;
Seconds
Minutes:
ааааааааааа .byte 1аааааааааа ;
Minutes
Hours:
ааааааааааа .byte 1аааааааааа ;
Hours
;
*********************************************************************
; Now we change to the code segment where the real program
code starts.
;
*********************************************************************
.cseg
;
********************************************************
; Fixed jump vectors for the system interrupts and
resets.
; ********************************************************
;
;$000
ааааа rjmp INIT_Machineааааа ;Restart
vector, points to the beginning of the code.
;$001
ааа retiаааааааааааааааааааа ;IRQ 0
;$002
ааа retiаааааааааа ааааааааа ;IRQ
1
;$003
ааа retiааааааааа аааааааааа ;Timer/Counter
2 Output compare match interrupt.
;$004
ааа retiааааааааа аааааааааа ;Timer/Counter
2 Overflow interrupt.
;$005
ааааа retiааааааааа ааааааааа ;Timer/Counter
1 Input capture interrupt.
;$006
ааа retiаааааааа аааааа ;Timer/Counter
1 Output compare A match.
;$007
ааа retiаааааааа аааааа ;Timer/Counter
1 Output compare B match.
;$008
ааа retiаааааааааааааааааааа ;Timer/Counter 1 Overflow
interrupt.
;$009
ааааа retiааааааааааааааааааа ;Timer/Counter 0 Overflow
interrupt.
;$00A
ааа retiааааааааааа ааа ;SPI
Serial transfer complete interrupt.
;$00B
ааа retiааааааааааа ааа ;Uart
RX complete.
;$00C
ааа retiаааааааааа ааааааааа ;Uart
TX data register empty.
;$00D
ааа retiааааааааааа ааа ;Uart
TX complete.
;$00E
ааа retiаааааааааааа аа ;Analogue
conversion complete.
;$00F
ааа retiаааааааааааа аа ;EEPROM
Ready.
;$010
ааа retiаааааааааа ааааааааа ;Analogue
comparator interrupt.
;
;
; **************************************
; This is the start of the program code.
; **************************************
;
INIT_Machine:
ааааа ldi а R24,$1fаааааааааааааааа ;
Disable the watchdog.
ааа out ааа $21,R24
ааа ldi ааа R24,$17
ааа out ааа $21,R24
ааа ldi ааа R24,$5fаааааа
ааа ; Setup the stack pointer to
top of ram.
ааа out ааа $3D,R24
ааа ldi ааа R24,$02
ааа out ааа $3E,R24
; Setup all the system variables.
ааа rcall а SetupIOааааааа
аа ; Setup IO configuration.
ааааа rcall SetupUartаааааааа ;
Setup the serial port.
ааааа rcall VideoInitаааааааа ;
Setup for video.
; *************************************************
; Actual program code goes here for the loop.......
; *************************************************
ааааа rjmpа Video1
Monitor:
ааааа ldiаааааааа ZL,low(Greeting*2)аааааааааа ; Send startup msg.
ааааа ldiаааааааа ZH,high(Greeting*2)
ааааа rcall TX_Str
ааааа rcall CRLFааааааааааааааааааа ;
CR/LF.
ааааа ldiаааааааа ZL,low(Prompt*2)ааааааа ; OK> prompt.
ааааа ldiаааааааа ZH,high(Prompt*2)
ааааа rcall TX_Str
MKbloop:
ааааа rcall Uart_RXаааааааааа ;
Get a character.
ааааа cpiаааааааа Param1,'V'а ; Do Video ?
ааааа brneа MkbZааааааа ;
Branch to next test if not 'V'.
; Do the video thing.
ааааа rjmpа Video
MkbZ:
ааааа ldiаааааааа ZL,low(A_Huh*2)аааааааа ; Huh ?
ааааа ldiаааааааа ZH,high(A_Huh*2)
ааааа rcall TX_Str
ааааа rcall CRLFааааааа ;
Next line.
ааааа rjmpа Mkbloop
; ********************************************
; Send the byte in Param1 out the serial port.
; ********************************************
;
Uart_TX:
ааааа sbisа USR,UDREааа ;
Check if TX empty.
ааааа rjmpа Uart_TXаааааааааа ;
Loop till ready to TX.
ааааа outаааааааа UDR,Param1а ; Send the byte.
ааааа ret
; ***********************************************************
; Receive a byte from the Uart if available, waits till
ok.
; Return it in Param1.
;
***********************************************************
;
Uart_RX:
ааааа sbisа USR,RXCаааааааааа ;
Check ready flag.
ааааа rjmpа Uart_RXаааааааааа ;
Loop till available.
ааааа inааааааааа Param1,UDRа ; Get character.
ааааа ret
;
*********************************************************
; Dump_Nibbles: Send byte Param1 to RS232 as ASCII
nibbles.
;
*********************************************************
;
Dump_Nibbles:
ааааа pushа Param1
ааааа rcall NibH2Asc
ааааа rcall Uart_TX
ааааа popаааааааа Param1
ааааа rcall NibL2Asc
ааааа rcall Uart_TX
ааааа ret
; ****************************************************
; Convert the nibble in Param1 to ASCII hex in Param1.
; ****************************************************
;
NibH2Asc:
ааааа swapа Param1ааааааааааа ;
Swap nibbles.
NibL2Asc:
ааааа pushа temp2аааааа ;
Save work register.
ааааа andiа Param1,$0fа ;
Isolate lower nibble.
ааааа ldiаааааааа Temp2,$30
ааааа cpiаааааааа Param1,10аа ; Check if lower then 10.
ааааа brloа Nib2Asc1
ааааа
; Nibble + $30 = '0' - '9'
; Nibble + $37 = 'A' - 'F'
ааааа ldiаа Temp2,$37
Nib2Asc1:
ааааа addаа Param1,Temp2
ааааа popаа temp2
ааааа ret
; ****************************************************
; Send a string from ROM to Uart. Terminated with $00.
; Start address in Z ie. R30/31. ZL and ZH.
; ****************************************************
TX_Str:
ааааа lpmааааааааааааааааааааааааа ; Load byte into R0.
ааааа orааааааааа R0,R0аааааа ;
Check if EOT, null.
ааааа breqа TX_StrE
ааааа movаааааааа Param1,R0аа ; Not a null so send.
ааааа rcall Uart_TX
ааааа adiwа ZL,$01ааааааааааа ;
Next byte.
ааааа rjmpа TX_Strааааааааааа ;
Keep going....
TX_StrE:
ааааа ret
; ***************************
; CRLF - send CRLF out RS232.
; ***************************
;
CRLF:
ааааа pushа Param1
ааааа ldiаааааааа Param1,CR
ааааа rcall Uart_TX
ааааа ldiаааааааа Param1,LF
ааааа rcall Uart_TX
ааааа popаааааааа Param1
ааааа ret
; ***************
; VIDEO Routines.
; ***************
VideoInit:
ааааа vidL
ааааа syncL
ааааа ret
; ***********************************
; SetupIO
; Setup the IO pins to suit this
; particular project.
; ***********************************
;
SetupIO:
ааааа ldiаааааааа Temp1,0
ааааа outаааааааа PORTC,Temp1аааааааааааа ; Turn off all bits.
ааааа ldiаааааааа Temp1,$c0аааааааааааааа ; Bit 7 & 6.
ааааа outаааааааа DDRC,Temp1
ааааа ldiаааааааа Temp1,0
ааааа outаааааааа PORTD,Temp1
ааааа ldiаааааааа Temp1,$40
ааааа outаааааааа DDRD,Temp1
ааа ret
; *****************************************************
; Set the hardware UART for non-interrupt TX/RX and
; set baudrate to value in BAUDRATE, eg 8MHz 25 = 19200
; *****************************************************
;
SetupUart:
ааааа ldiаа Temp1,BAUDRATE
ааааа outаа UBRR,Temp1
ааааа ldiаа Temp1,$18аа ;
TX/RX 8 bits, no irq.
ааааа outаа UCR,Temp1аа
ааааа ret
Video:
ааааа ldiаааааааа ZL,low(VidMsg*2)ааааааа ; Video Greeting.
ааааа ldiаааааааа ZH,high(VidMsg*2)
ааааа rcall TX_Str
ааааа rcall CRLFааааааа ;
Next line.
;
###########################################################################
; #аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа ааааааааааааааааааааааа #
; #аа These are the
REAL video routines. This code generates 625 lineа PALаааааааа #
; #аа interlaced
video using an 8MHz clock on the AT90S8535.ааааааааааааааааааааааааааа #
; #аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа ааааааааааааааааааааааа #
;
###########################################################################
Video1:
ааааа ; First setup
the real time clock counters. H/M/S and fields.
ааааа ldiаааааааа Temp1,0
ааааа stsаааааааа Seconds,Temp1
ааааа stsаааааааа Minutes,Temp1
ааааа stsаааааааа Hours,Temp1
ааааа ldiаааааааа FldCnt,50
ааааа ; Clear the
video RAM.
ааааа ldiаааааааа Temp1,160
ааааа ldiаааааааа XL,low(Vram)
ааааа ldiаааааааа XH,high(Vram)
ааааа ldiаааааааа Temp2,0
FillV:
ааааа stааааааааа X+,Temp2
ааааа decаааааааа Temp1
ааааа brneа FillV
ааааа ; Fill the
second text line with a predefined message.
ааааа ldiаааааааа Temp1,160
ааааа ldiаааааааа XL,low(Vram+160)
ааааа ldiаааааааа XH,high(Vram+160)
ааааа ldiаааааааа ZL,low(MSG1 * 2)
ааааа ldiаааааааа ZH,high(MSG1 * 2)
FillV1:
ааааа lpmаааааааа
ааааа stааааааааа X+,R0
ааааа adiwа ZL,1
ааааа decаааааааа Temp1
ааааа brneа FillV1
ааааа ; Finally put
two : characters into the top line's time.
ааааа ldiаааааааа Temp1,17ааааааааа ; Position in line.
ааааа ldiаааааааа Temp2,10ааааааааа ; Character code from char gen image.
ааааа rcall PutChrааааааааааааааааа ;
Fill up the dots as required.
;
ааааа ldiаааааааа Temp1,14
ааааа ldiаааааааа Temp2,10
ааааа rcall PutChr
; *****************************************************
; *аа Produce the
vertical sync and pe for first field. *
; *аа This is the
start of the whole video loop.аааааааааа а *
; *****************************************************
Field:
; Generate the 5 vertical sync pulses at the start of
field 1.
ааааа ldiаааааааа Temp2,5аааааааааааааааа ;
5 vertical sync pulses.
VS1:
ааааа syncLааааааааааааааааааааааа ; syncL is just a macro
to turn the sync i/o bit off.
ааааа waitа VS,Temp1ааааааааа ;
wait is a macro that waits for up to 765 cycles.
ааааа syncHааааааааааааааааааааааа ; syncH is a macro to
turn the sync bit on.
ааааа waitа VSP,Temp1
ааааа decаааааааа Temp2
ааааа brneа VS1аа
; Generate the 5 post equalising pulses.
ааааа ldiаааааааа Temp2,5аааааааааааааааа ;
5 post eq pulses.
PE1:
ааааа syncL
ааааа waitа PEP,Temp1
ааааа syncH
ааааа waitа PE,Temp1
ааааа decаааааааа Temp2
ааааа brneа PE1аа
;аааа Now we are on
line 6 and in the teletext area. We have 17 invisible lines
;аааа to fill up
with our own processing. That's 8704 clock cycles to kill.
;аааа This is the
time to do some repetitive house keeping functions like
;аааа maintaining
our real time clock and counters
ааааа nopааааааааааааааааааааааааааааааа ; Generate sync
for this line.
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа rcall UpdateRTCаааааааа ;
Update our time keepers.
ааааа ldiаааааааа YL,low(Vram)ааааа ; Load Y register with Vram base as output
ааааа ldiаааааааа YH,high(Vram)аааа ; routines need this every field.
ааааа waitа 54,Temp1ааааааааа ;
wait till this line is finished.
; Do some black lines to fill up time until we get to our
visible area.
; Any of these black invisible lines could be used for
you processing.
ааааа ldiаааааааа Temp2,15ааааааааа ; Do some black lines to position this field.
BLK1:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT+FP),Temp1 ; Waste some time equivalent
to Back Porch, active Video and Front porch.
ааааа decаааааааа Temp2
ааааа brneа BLK1а
; Now we can do some real video, the lead in to this is a
black line to allow
; time to go and call the DoVideo code. This is the same
for both fields.
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT),Temp1
ааааа waitа (FP-1),Temp1ааааа ;
Cut the front porch short to allow for rcall.
; At this point go and produce the video for the 1st
field. With all of the
; values used at the moment this should take 280 lines.
ааааа rcall DoVideoаааааааааааааааа ;
Do the active video stuff that is the same
аааааааааааааааааааааааааааааааааааааааа ;
for both fields.
;аааа Some more
black lines at the end of the screen.
ааааа ldiаааааааа Temp2,8
BLK8:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT+FP),Temp1
ааааа decаааааааа Temp2
ааааа brneа BLK8а
;аааа 5 Pre/Post Eq
pulses.
ааааа ldiаааааааа Temp2,5аааааааааааааааа ;
5 pre/post eq pulses.
PE2:
ааааа syncL
ааааа waitа PEP,Temp1аааааааа ;
Sync line now low
ааааа syncH
ааааа waitа PE,Temp1ааааааааа ;
Sync line now high
ааааа decаааааааа Temp2
ааааа brneа PE2аа
;аааа Now we are at
the start of the even field.
ааааа ldiаааааааа Temp2,5аааааааааааааааа ;
vertical sync pulses.
VS2:
ааааа syncLааааааааааааааааааааааа
ааааа waitа VS,Temp1
ааааа syncH
ааааа waitа VSP,Temp1
ааааа decаааааааа Temp2
ааааа brneа VS2аааааааа
;
ааааа ldiаааааааа Temp2,4аааааааааааааааа ;
post eq pulses.
PE3:
ааааа syncL
ааааа waitа PEP,Temp1
ааааа syncH
ааааа waitа PE,Temp1
ааааа decаа ааааа Temp2
ааааа brneа PE3аа
;аааа Line 318 black
with short sync.
ааааа nop
ааааа syncL
ааааа waitа VSP,Temp1аааааааа ;
Vertical sync, line low.
ааааа syncH
ааааа waitа (512-VSP-7),Temp1 ; balance of the line.
;
ааааа ldiаааааааа YL,low(Vram)ааааа ; Reset the Y register to start of videoram again.
ааааа ldiаааааааа YH,high(Vram)
;аааа Line 319 black
with normal sync.
;аааа This line
should match up as line 7 with interlacing.
ааааа ldiаааааааа Temp2,21ааааааааа ; Black lines to position the field.
BLK2:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT+FP),Temp1
ааааа decаааааааа Temp2
ааааа brneа BLK2
; Do a single black line as intro to real video.
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа (FP-1),Temp1
ааааа rcall DoVideoаааааааааааааааа ;
Go do video same for both fields.
;аааа Another bit of
padding.
ааааа ldiаааааааа Temp2,2
BLK2z:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа FP,Temp1
ааааа decаааааааа Temp2
ааааа brneа BLK2z
;аааа Line 623 (half
line).
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа 215,Temp1
;аааа Back to
vertical sync stuff before doing everything again...
ааааа ldiаааааааа Temp2,4аааааааааааааааа ;
vertical sync pulses.
VS3:
ааааа syncLааааааааааааааааааааааа
ааааа waitа VS,Temp1
ааааа syncH
ааааа waitа VSP,Temp1
ааааа decаааааааа Temp2
ааааа brneа VS3аа
;
ааааа nop
ааааа syncL
ааааа waitа VS,Temp1
ааааа syncH
ааааа waitа VSP,Temp1
ааааа rjmpа Fieldаааааааааааа ;
Play it again Sam, we have done a full 625 lines now...
ааааа
;
**********************************************************
;аааа Big Black -
280 lines of black lines.
;аааа You would
insert your own code in here to generate the
;аааа video content
of your choice.
;аааа This is a copy
of DoVideo with nothing in it.
; **********************************************************
;
Black:
ааааа ldiаааааааа Temp2,140аааааааа ; Black lines to position the field.
Black1:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа FP,Temp1
ааааа decаааааааа Temp2
ааааа brneа Black1
ааааа ldiаааааааа Temp2,139аааааааа ; Black lines to position the field.
Black2:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа FP,Temp1
ааааа decаааааааа Temp2
ааааа brneа Black2
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа (FP-2),Temp1
ааааа ret
; =========================================================================
;ааааааааааааааааааааааааааааааааа Make
some video for both fields.
;
=========================================================================
DoVideo:
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT),Temp1
ааааа waitа (FP+3),Temp1
;
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа (BP+VT),Temp1
ааааа waitа (FP+3),Temp1
; In the next line time we put the time into VRAM. First
converting H/M/S to BCD then
; using PutChrX to character generate the dots for the
numerals.
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Secondsаааа ; Get Seconds counter.
ааааа rcall Bin2BCDаааааааааааааааа ;
Turn it into BCD in Temp3.
ааааа movаааааааа Temp2,Temp3аааааа
ааааа swapа Temp2аааааааааааа ;
Swap the tens and units digits.
ааааа andiа Temp2,$0fаааааааа ;
Only keep least significant nibble. (TENS)
ааааа ldiаааааааа XL,low(Vram+18)аа ; Position in screen RAM.
ааааа ldiаааааааа XH,high(Vram+18)а
ааааа rcall PutChrXаааааааааааааааа ;
Do character generator.
ааааа waitа 150,Temp1
ааааа waitа (FP+2),Temp1
; now do the same for the UNITS of seconds.
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Seconds
ааааа rcall Bin2BCDаааааааааа
ааааа movаааааааа Temp2,Temp3
ааааа nop
ааааа andiа Temp2,$0fаа
ааааа ldiаааааааа XL,low(Vram+19)
ааааа ldiаааааааа XH,high(Vram+19)
ааааа rcall PutChrXаааааааааааааааа
ааааа waitа 150,Temp1
ааааа waitа (FP+2),Temp1
; and minutes...
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Minutesаааа ; 4
ааааа rcall Bin2BCDаааааааааааааааа ;
82
ааааа movаааааааа Temp2,Temp3аааааа ; 84
ааааа swapа Temp2
ааааа andiа Temp2,$0fаааааааа ;
ааааа ldiаааааааа XL,low(Vram+15)аа ; 85
ааааа ldiаааааааа XH,high(Vram+15)а ; 86
ааааа rcall PutChrXаааааааааааааааа ;
259 (173 cycles to display).
ааааа waitа 150,Temp1
ааааа waitа (FP+2),Temp1
;
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Minutesаааа ; 4
ааааа rcall Bin2BCDаааааааааааааааа ;
82
ааааа movаааааааа Temp2,Temp3аааааа ; 84
ааааа nop
ааааа andiа Temp2,$0fаааааааа ;
ааааа ldiаааааааа XL,low(Vram+16)аа ; 85
ааааа ldiаааааааа XH,high(Vram+16)а ; 86
ааааа rcall PutChrXаааааааааааааааа ;
259 (173 cycles to display).
ааааа waitа 150,Temp1
ааааа waitа (FP+2),Temp1
; and Hours...
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Hoursаааааа ; 4
ааааа rcall Bin2BCDаааааааааааааааа ;
82
ааааа movаааааааа Temp2,Temp3аааааа ; 84
ааааа nop
ааааа andiа Temp2,$0fаааааааа ;
ааааа ldiаааааааа XL,low(Vram+13)аа ; 85
ааааа ldiаааааааа XH,high(Vram+13)а ; 86
ааааа rcall PutChrXаааааааааааааааа ;
259 (173 cycles to display).
ааааа waitа 150,Temp1
ааааа waitа (FP+2),Temp1
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа ldsаааааааа Temp1,Hoursаааааа ; 4
ааааа rcall Bin2BCDаааааааааааааааа ;
82
ааааа movаааааааа Temp2,Temp3аааааа ; 84
ааааа swapа Temp2
ааааа andiа Temp2,$0fаааааааа ;
ааааа ldiаааааааа XL,low(Vram+12)аа ; 85
ааааа ldiаааааааа XH,high(Vram+12)а ; 86
ааааа rcall PutChrXаааааааааааааааа ;
259 (173 cycles to display).
ааааа waitа 150,Temp1
ааааа waitа (FP+1),Temp1
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ааааа ldiаааааааа Temp2,12ааааааааа ; WAS 13 *********@*@*@*@*@*@*@
dVID1:
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа FP,Temp1
;аааа pushа Temp2аааааааааааа ;
2
;аааа ldsаааааааа Temp1,Hoursаааааа ; 4
;аааа rcall Bin2BCDаааааааааааааааа ;
82
;аааа movаааааааа Temp2,Temp3аааааа ; 84
;аааа swapа Temp2
;аааа andiа Temp2,$0fаааааааа ;
;аааа ldiаааааааа Temp1,9
;аааа ldiаааааааа XL,low(Vram+1)ааа ; 85
;аааа ldiаааааааа XH,high(Vram+1)аа ; 86
;аааа rcall PutChrXаааааааааааааааа ;
259 (173 cycles to display).
;аааа popаааааааа Temp2аааааааааааа ;
261
;аааа waitа 144,Temp1
;аааа vidL
;аааа waitа FP,Temp1
;
ааааа decаааааааа Temp2
ааааа brneа dVID1аааааааааааа ;
Loop for all the blank lines.
;
=================================================================
;аааа Here we output
160 pixels (20 bytes) by 16 pixels from (x) Vram.
;аааа We come in
here with Y pointing to the start of the video line
;аааа in Vram. Each
time throught the loop of PXH lines we need to
;аааа restore this
entry address into X. These routines produce the
;аааа fastest dot
rate at the expense of forcing you to use remaining
;аааа bits of PORTC
for input only as we hammer these.
;
=================================================================
ааааа ldiаааааааа Temp2,PXH
;
XY0:
ааааа syncL
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7аааааааааааааааааааааааааааааааа ;
Output 160 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1аааааааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY0
;
;аааа Line 2.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ1
XY1:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ1:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1аааааааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY1
;
;аааа Line 3.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ2
XY2:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ2:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1аааааааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY2
;
;аааа Line 4.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ3
XY3:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ3:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY3
;
;аааа Line 5.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ4
XY4:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ4:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1аааааааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY4
;
;аааа Line 6.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ5
XY5:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ5:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY5
;
;аааа Line 7.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ6
XY6:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ6:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1аааааааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY6
;
;аааа Line 8.
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ7
XY7:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ7:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY7
;
;аааа END OF THE
FIRST CHARACTER LINE - Line 9
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ8
XY8:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ8:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY8
;
;аааа Line 10
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ9
XY9:
ааааа syncLаааааааааааа ааааааааааа ;
next use up 36 cycles for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ9:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY9
;
;аааа Line 11
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ10
XY10:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ10:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY10
;
;аааа Line 12
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ11
XY11:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ11:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY11
;
;аааа Line 13
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ12
XY12:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ12:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY12
;
;аааа Line 14
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ13
XY13:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ13:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY13
;
;аааа Line 15
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ14
XY14:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ14:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY14
;
;аааа Line 16
;
ааааа ldiаааааааа Temp2,PXH
ааааа syncLааааааааааааааааааааааа ; Fire up the sync.
ааааа adiwа YL,20
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 30,Temp1
ааааа rjmpа XYZ15
XY15:
ааааа syncLааааааааааааааааааааааа ; next use up 36 cycles
for HS.
ааааа movаааааааа XL,YL
ааааа movаааааааа XH,YH
ааааа waitа 34,Temp1
XYZ15:
ааааа syncH
ааааа waitа (BP+36+HPOS),Temp1
ааааа rcall B7ааааааааааааааааааааа ;
Output 80 pixels across from (X) [vram].
ааааа vidL
ааааа waitа (FP+25-HPOS),Temp1ааааа ; Front porch 1.5uS.
ааааа decаааааааа Temp2
ааааа brneа XY15
;аааа Now use up the
rest of the screen with black lines.
ааааа ldiаааааааа Temp2,9аааа
zVID2:
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа BP,Temp1ааааааааа ;
Sync now high. Back porch.
ааааа waitа 410,Temp1аааааааа ;
410 cycles of time to waste in active video area.
ааааа waitа FP,Temp1ааааааааа ;
Front porch 1.5uS.
ааааа decаааааааа Temp2аааааааааааа ;
1
ааааа brneа zVID2аааааааааааа ;
Loop for number of black lines wanted.
; Generate hires video here !
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа (BP+30),Temp1аааа ;
Sync now high. Back porch.
;
ааааа ldiаааааааа Temp2,45ааааааааа ; 100 transitions.
xt2:
ааааа vidH
ааааа nop
ааааа vidL
ааааа decаааааааа Temp2
ааааа brneа xt2
ааааа waitа (FP+22),Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа (BP+30),Temp1аааа ;
Sync now high. Back porch.
;
ааааа ldiаааааааа Temp2,45ааааааааа ; 100 transitions.
xt3:
ааааа vidH
ааааа nop
ааааа vidL
ааааа decаааааааа Temp2
ааааа brneа xt3
ааааа waitа (FP+22),Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа (BP+30),Temp1аааа ;
Sync now high. Back porch.
;
ааааа ldiаааааааа Temp2,45ааааааааа ; 100 transitions.
xt4:
ааааа vidH
ааааа nop
ааааа vidL
ааааа decаааааааа Temp2
ааааа brneа xt4
ааааа waitа (FP+22),Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа (BP+30),Temp1аааа ;
Sync now high. Back porch.
;
ааааа ldiаааааааа Temp2,45ааааааааа ; 100 transitions.
xt5:
ааааа vidH
ааааа nop
ааааа vidL
ааааа decаааааааа Temp2
ааааа brneа xt5
ааааа waitа (FP+22),Temp1
;
;
ааааа ldiаааааааа Temp2,194аааааааа ; was 191, 177,
dVID2:
ааааа syncL
ааааа waitа HS,Temp1ааааааааа ;
Horizontal sync, line low.
ааааа syncH
ааааа waitа BP,Temp1ааааааааа ;
Sync now high. Back porch.
ааааа waitа 410,Temp1аааааааа ;
410 cycles of time to waste in active video area.
ааааа waitа FP,Temp1ааааааааа ;
Front porch 1.5uS.
ааааа decаааааааа Temp2аааааааааааа ;
1
ааааа brneа dVID2аааааааааааа ;
Loop for number of black lines wanted.
;
;
****************************************************************
;аааа Use black
lines to scroll my message area. This is done by
;аааа bit shifting
the video ram through carry. Each time SCROLL
;аааа is called it
does two lines.
; ****************************************************************
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа ldiаааааааа XL,low(Vram+160)
ааааа ldiаааааааа XH,high(Vram+160)
;аааа rcall Scroll
ааааа waitа 261,Temp1
ааааа waitа 208,Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа ldiаааааааа XL,low(Vram+200)
ааааа ldiаааааааа XH,high(Vram+200)
;аааа rcall Scroll
ааааа waitа 261,Temp1
ааааа waitа 208,Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа ldiаааааааа XL,low(Vram+240)
ааааа ldiаааааааа XH,high(Vram+240)
;аааа rcall Scroll
ааааа waitа 261,Temp1
ааааа waitа 208,Temp1
;
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа ldiаааааааа XL,low(Vram+280)
ааааа ldiаааааааа XH,high(Vram+280)
;аааа rcall Scroll
ааааа waitа 261,Temp1
ааааа waitа 208,Temp1
; Last line of active area.
ааааа nop
ааааа syncL
ааааа waitа HS,Temp1
ааааа syncH
ааааа waitа BP,Temp1
ааааа waitа VT,Temp1
ааааа waitа (FP-2),Temp1
ааааа ret
; **************************************************************
;аааа Bin2BCD -
convert the value in Temp1 (0-99) to BCD in Temp3
;
**************************************************************
Bin2BCD:
;аааа To make sure
this routine always takes the same amount of time
;аааа we need to do
some fudging.
ааааа pushа Temp1
ааааа pushа Temp2
ааааа cpiаааааааа Temp1,10ааааааааа ; Less than 10 ?
ааааа brccа Bin2a
ааааа waitа 53,Temp2
ааааа rjmpа Bin2BCDx
Bin2a:
ааааа cpiаааааааа Temp1,10ааааааааа ; Equals 10 ?
ааааа brneа Bin2b
ааааа waitа 37,Temp2
ааааа rjmpа Bin2BCDx
Bin2b:
ааааа cpiаааааааа Temp1,20ааааааааа ; < 20 ?
ааааа brccа Bin2c
ааааа waitа 34,Temp2
ааааа rjmpа Bin2BCDx
Bin2c:
ааааа cpiаааааааа Temp1,30ааааааааа ; < 30 ?
ааааа brccа Bin2d
ааааа waitа 26,Temp2
ааааа rjmpа Bin2BCDx
Bin2d:
ааааа cpiаааааааа Temp1,40ааааааааа ; < 40 ?
ааааа brccа Bin2e
ааааа waitа 18,Temp2
ааааа rjmpа Bin2BCDx
Bin2e:
ааааа cpiаааааааа Temp1,50ааааааааа ; < 50 ?
ааааа brccа Bin2f
ааааа waitа 10,Temp2
ааааа rjmpа Bin2BCDx
Bin2f:
ааааа cpiаааааааа Temp1,60ааааааааа ; < 60 ?
ааааа brccа Bin2g
ааааа waitа 2,Temp2
ааааа rjmpа Bin2BCDx
Bin2g:
;
Bin2BCDx:
ааааа ldiаааааааа Temp3,0
ааааа cpiаааааааа Temp1,10ааааааааа ; Check if < 10
ааааа brcsа Bin2BCDa
;аааа > 9
Bin2BCDb:
ааааа incаааааааа Temp3
ааааа subiа Temp1,10
ааааа ; if now zero
we jump out
ааааа breqа Bin2BCDc
ааааа ; if not <
10 then try again.
ааааа brccа Bin2BCDb
ааааа ldiаааааааа Temp2,10
ааааа addаааааааа Temp1,Temp2
ааааа decаааааааа Temp3
;Bin2BCDc:
ааааа swapа Temp3
ааааа orааааааааа Temp1,Temp3
Bin2BCDa:
ааааа movаааааааа Temp3,Temp1
ааааа popаааааааа Temp2
ааааа popаааааааа Temp1
ааааа ret
Bin2BCDc:
ааааа waitа 8,temp2
ааааа swapа Temp3
ааааа orааааааааа Temp1,Temp3
ааааа movаааааааа Temp3,Temp1
ааааа popаааааааа Temp2
ааааа popаааааааа Temp1
ааааа ret
;
; *******************************************************
;аааа B7 - Generates
the hires (!) video corresponding to the info
;аааа in video ram.
We have sacrificed the ability to use the
;аааа rest of the
video port (PORTC) for output because these
;аааа bits get
hammered in an effort to get the highest
;аааа dot rate
possible. You can of course still use these bits
;аааа for input it's
only the pullups that would then be upset.
;аааа I know it's a
lot of repeating code but if you put it in
;аааа a loop you
lose resolution ie. it takes longer to do each
;аааа pixel.
;
;аааа Each 20 bytes
(160 pixels) forms a line.
;
;аааа Enter this
routine with the X register pointing to the
;аааа start of the
video line.
; *******************************************************
;
B7:
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; 2
ааааа outаааааааа Portc,Temp3аааааааааааа ; 2
;
ааааа rolаааааааа Temp3аааааааааааааааааа
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Second byte.
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа Third byte.
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Fourth byte
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа Fifth byte.
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Sixth byte.
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа Seventh byte.
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Eighth byte
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Ninth byte
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; Tenth byte
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
; 11
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; 2
ааааа outаааааааа Portc,Temp3аааааааааааа ; 2
;
ааааа rolаааааааа Temp3аааааааааааааааааа
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; 12
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 13
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
; 14
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 15
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;аааа 16
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; 2
ааааа outаааааааа Portc,Temp3аааааааааааа ; 2
;
ааааа rolаааааааа Temp3аааааааааааааааааа
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 17
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 18
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 19
;
ааааа ldааааааааа Temp3,x+
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
;аааа 20
;
ааааа ldааааааааа Temp3,x+ааааааааааааааа ; Get byte from (x) and inc x.
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
;
ааааа rolаааааааа Temp3
ааааа outаааааааа Portc,Temp3
ааааа ret
;
; **************
; Some messages.
; **************
Prompt:
ааааа .dbаа "Ok> ",0
Greeting:
ааааа .dbаа "AVR Video
Display",0x0d,0x0d,0x0a,0x07,0
VidMsg:
ааааа .dbаа "Starting Video Generator ",0
A_Huh:
ааааа .dbаа " Huh ?",0
;
; ****************************
;аааа Character
Generator ROM!
; ****************************
;
;аааа Temp1 = Screen
address from 0 to 9
;аааа Temp2 =
Character - 0 = Chr_0, 1 = Chr_1
PutChr:
ааааа ldiаааааааа XL,low(Vram)ааааааааааа ; 1
ааааа ldiаааааааа XH,high(Vram)аааааааааа ; 2
;
ааааа orааааааааа Temp1,Temp1аааааааааааа ; 3 Address is zero so don't add anything.
ааааа breqа PutChrXааааааааааааааааааааа ;
4
;
PutChr5a:
ааааа adiwа XL,1ааааааааааааааааааа ;
6
ааааа decаааааааа Temp1аааааааааааааааааа ;
7
ааааа brneа PutChr5aааааааааааааааа ;
8
;
; Enter here with X already set to the right address in
Vram.
;
PutChrX:
ааааа ldiаааааааа ZL,low(Chr_0*2)аааааааа ; 1
ааааа ldiаааааааа ZH,high(Chr_0*2)а ; 2
;
ааааа sbiwа ZL,8
ааааа incаааааааа Temp2
ааааа ldiаааааааа Temp3,11
;
;аааа Temp2 now 1
based not 0 (Temp2 * 6)
;
PutChr1:
ааааа adiwа ZL,8ааааааааааааааааааа ;
2
ааааа decаааааааа Temp3аааааааааааааааааа ;
1
ааааа decаааааааа Temp2аааааааааааааааааа ;
1
ааааа brneа PutChr1ааааааааааааааааааааа ;
1/2
ааааа nopаааааааа аааааааааааааааааааааааааааа ;
1
;
PutChr9:
ааааа decаааааааа Temp3аааааааааааааааааа ;
1
ааааа nop
ааааа nop
ааааа nop
ааааа brneа PutChr9ааааааааааааааааааааа ;
1/2
ааааа nopааааааааааааааааааааааааааааааааааааа ; 1
;
PutChr2:
ааааа ldiаааааааа Temp2,8ааааааааааааааааааааа ;
7 / n Number of rows to fill.
PutChr3:
ааааа lpmааааааааааааааааааааааааааааааааааааа ; Get
character from program memory.
ааааа stааааааааа x,R0ааааааааааааааааааа ;
Save to video memory.
ааааа adiwа ZL,1
ааааа adiwа XL,20аааааааааааааааааа ;
Point to next video row.
ааааа decаааааааа Temp2
ааааа brneа PutChr3ааааааааааааааааааааа ;
Loop for 8 rows.
ааааа nop
ааааа ret
;
; ****************************************************
; Scroll
; Enter with X set to first VRAM line of 2 to scroll.
; ****************************************************
;
Scroll:
ааааа ldааааааааа Temp1,Xааааааааааааааааааааа ; Get left byte.
ааааа rolаааааааа Temp1аааааааааааааааааа ;
Set carry to MSB.
ааааа ldiаааааааа Temp2,10
ааааа inааааааааа Temp3,sreg
ааааа adiwа XL,9
Lp0:
ааааа ldааааааааа Temp1,X
ааааа outаааааааа sreg,Temp3
ааааа rolаааааааа Temp1
ааааа stааааааааа X,Temp1
ааааа inааааааааа Temp3,sreg
ааааа sbiwа XL,1
ааааа decаааааааа Temp2
ааааа brneа Lp0
;
ааааа adiwа XL,11
ааааа ldааааааааа Temp1,Xааааааааааааааааааааа ; Get left byte.
ааааа rolаааааааа Temp1аааааааааааааааааа ;
Set carry to MSB.
ааааа ldiаааааааа Temp2,10
ааааа inааааааааа Temp3,sreg
ааааа adiwа XL,9
Lp1:
ааааа ldааааааааа Temp1,X
ааааа outаааааааа sreg,Temp3
ааааа rolаааааааа Temp1
ааааа stааааааааа X,Temp1
ааааа inааааааааа Temp3,sreg
ааааа sbiwа XL,1
ааааа decаааааааа Temp2
ааааа brneа Lp1
;
ааааа ret
UpdateRTC:
;
;аааа Since we need
the Y register pointing to the start of Vram each
;аааа frame do it
here. Update our seconds count by counting frames.
;
ааааа vidL
ааааа ldiаааааааа YL,low(Vram)
ааааа ldiаааааааа YH,high(Vram)
;
;аааа First update
the field counter as this will allow us to keep accurate count of time.
;
ааааа decаааааааа FldCnt
ааааа orааааааааа FldCnt,FldCnt
ааааа brneа xNotSec
;
ааааа ldiаааааааа FldCnt,25аааааааааааааа ; Reset field counter as we had 1 second worth.
ааааа ldsаааааааа Temp1,Secondsаааааааааа ; Get current seconds count.
ааааа incаааааааа Temp1аааааааааааааааааа ;
Increment by one.
ааааа stsаааааааа Seconds,Temp1аааааааааа ; Save it back.
ааааа cpiаааааааа Temp1,60ааааааааааааааа ; Is it up to 60 seconds, if so inc Minutes.
ааааа brloа xNotMinааааааааааааааааааааа ;
Was less so skip minutes.
;
ааааа ldiаааааааа Temp1,0ааааааааааааааааааааа ;
Was 60 seconds so zero the seconds.
ааааа stsаааааааа Seconds,Temp1
ааааа ldsаааааааа Temp1,Minutesаааааааааа ; Get current minute count.
ааааа incаааааааа Temp1аааааааааааааааааа ;
Add one to it.
ааааа stsаааааааа Minutes,Temp1
ааааа cpiаааааааа Temp1,60ааааааааааааааа ; Is it up to 60 minutes, if so inc Hours.
ааааа brloа xNotHourааааааааааааааа ;
Was less so skip hours.
;
ааааа ldiаааааааа Temp1,0ааааааааааааааааааааа ;
Was 60 minutes so zero minutes.
ааааа stsаааааааа Minutes,Temp1
ааааа ldsаааааааа Temp1,Hoursаааааааааааа ; Get current hour count.
ааааа incаааааааа Temp1аааааааааааааааааа ;
Add one to it.
ааааа stsаааааааа Hours,Temp1
;
ааааа waitа (VT-35),Temp1
ааааа ret
;
xNotSec:
ааааа waitа (VT-10),Temp1
ааааа ret
;
xNotMin:
ааааа waitа (VT-20),Temp1
ааааа ret
;
xNotHour:
ааааа waitа (VT-33),Temp1
ааааа ret
; This is a message drawn in a 160 by 8 dot matrix.
MSG1:
.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.db
28,250,47,160,7,28,113,207,156,248,120,68,4,80,64,0,128,28,0,0
.db 34,35,104,32,8,162,138,40,34,128,68,164,4,64,64,0,128,8,0,0
.db
34,34,168,32,8,162,130,40,2,128,69,20,4,83,206,56,132,136,198,72
.db
62,34,47,32,231,162,113,207,12,240,121,20,4,84,81,68,228,137,41,72
.db
34,34,40,32,0,162,10,32,130,8,65,244,2,148,94,68,147,136,231,56
.db 34,34,40,32,0,162,138,40,162,136,65,20,2,148,80,68,144,136,33,8
.db
34,34,47,190,0,156,113,199,28,112,65,23,193,19,207,56,231,29,206,112
; This is a character generator ROM for numbers 0-9 and
colon (:).
; Designed to use an 8 by 8 matrix.
Chr_0:
.db 60,аааа 66,аа 66,аа 66,аа 66,аа 66,аа 60,аа 0аааа ; 0
.db 48,аааа 80,аа 16,аа 16,аа 16,аа 16,аа 124,0 ;
1
.db 60,аааа 66,аа 2,ааа 60,аа 64,аа 64,аа 126,0 ;
2
.db 60,аааа 66,аа 2,ааа 28,аа 2,ааа 66,аа 60,аа 0аааа ; 3
.db 12,аааа 20,аа 36,аа 126,4,ааааа 4,ааа 4,ааа 0аааа ;
4
.db 126,64, 64,аа 124,2,ааааа 2,ааа 124,0 ;
5
.db 60,аааа 66,аа 64,аа 124,66,аааа 66,аа 60,аа 0аааа ;
6
.db 126,66, 2,ааа 4,ааа 8,ааа 8,ааа 8,ааа 0аааа ;
7
.db 60,аааа 66,аа 66,аа 60,аа 66,аа 66,аа 60,аа 0аааа ; 8
.db 60,аааа 66,аа 66,аа 62,аа 2,ааа 66,аа 60,аа 0аааа ; 9
.db 0b00000000, 0b00000000,а 0b00011000, 0b00011000, 0b00000000, 0b00011000, 0b00011000,ааааа 0b00000000а ; :
╧хЁхщЄш:
/├ыртэр /
CBuild/
JavaScript 1.2-5.6/
Delifi6/
I2C ъюэЄЁюыыхЁ√/
AVR ъюэЄЁюыыхЁ√/
╧╦╚╤/
AHDL/
VHDL/
LPT EPP/ LPT ECP/ PCI/ COM port/ I2C/ RS-232/
|