.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/
╨хщЄшэу@Mail.ru Rambler's Top100 Rambler's Top100 Rambler's Top100    
Используются технологии uCoz