; This file is disassembled using DISASM84
; (c) 1995-1996 JS/SN

	TITLE		"zar.ASM"
	LIST		P=16C84

	INDIR	EQU	00H		; Indirect pointer
	RTCC	EQU	01H		; Real time clock / counter
	PCL	EQU	02H		; Program counter low byte
	STATUS	EQU	03H		; Status register
	CY	EQU	0		; Carry / borrow bit
	DC	EQU	1		; Digit carry
	Z	EQU	2		; Zero flag
	PD	EQU	3		; Power down
	T0	EQU	4		; Time-out bit
	RP0	EQU	5		; Register page select bits
	RP1	EQU	6		; Not used in 16C84
	RP2	EQU	7		; Not used in 16C84
	FSR	EQU	04H		; Indirect pointer
	PORTA	EQU	05H		; PORT A
	PORTB	EQU	06H		; PORT B
	EEDATA	EQU	08H		; Eeprom data
	EEADR	EQU	09H		; Eeprom address
	PCLATH	EQU	0AH		; Program counter high byte
	INTCON	EQU	0BH		; Interrupt control
	TRISA	EQU	085H		; Data direction port A
	TRISB	EQU	086H		; Data direction port B
	EECON1	EQU	088H		; Eeprom control
	W	EQU	0		; W reg. as destination
	F	EQU	1		; F file as destination

		ORG	0000H
BASLA:
;		BTFSS	STATUS,T0
;		RETURN			; Return from subroutine
;		goto BASLA

		CLRF	PORTB
		MOVLW	05FH
		MOVWF	0CH
		MOVLW	00DH
		MOVWF	FSR

c007c:		CLRF	INDIR
		INCF	FSR,F
		DECFSZ	0CH,F
		GOTO	c007c
		GOTO	c02Cc

c00Cc:		CALL	c021c

c00Dc:		MOVWF	FSR
		ANDLW	007H
		XORWF	FSR,F
		BCF	STATUS,CY	; Clear carry flag
		RRF	FSR,F
		RRF	FSR,F
		RRF	FSR,F
		BTFSC	FSR,04
		BSF	FSR,07
		BCF	FSR,04
		CLRF	PCLATH
		ADDWF	PCL,F		; Relative addressing
		RETLW	001H
		RETLW	002H
		RETLW	004H
		RETLW	008H
		RETLW	010H
		RETLW	020H		; ' '
		RETLW	040H		; '@'
		RETLW	080H

c021c:		ANDLW	007H
		CLRF	PCLATH
		ADDWF	PCL,F		; Relative addressing
		RETLW	030H		; '0'
		RETLW	031H		; '1'
		RETLW	032H		; '2'
		RETLW	033H		; '3'
		RETLW	034H		; '4'
		RETLW	035H		; '5'
		RETLW	036H		; '6'
		RETLW	037H		; '7'

c02Cc:		MOVLW	007H
		CALL	c093c
		MOVLW	0FFH
		CALL	c0FDc
		MOVLW	001H
		MOVWF	0CH
		MOVLW	004H
		MOVWF	0DH

c034c:		MOVF	0CH,W
		MOVWF	0EH
		CALL	c04Cc
		MOVF	0DH,W
		MOVWF	0EH
		CALL	c04Cc
		MOVLW	007H
		CALL	c08Fc
		MOVLW	037H
		CALL	c112c
		CALL	c101c
		MOVLW	001H
		CALL	c0EDc
		BTFSS	STATUS,Z	; Skip if zero
		GOTO	c06Ec
		MOVLW	012H
		CALL	c104c
		MOVLW	001H
		CALL	c0D4c
		MOVLW	012H
		CALL	c10Bc

c049c:		MOVLW	007H
		CALL	c096c
		GOTO	c034c

c04Cc:		MOVLW	000H
		MOVWF	PCLATH
		MOVF	0EH,W
		ADDLW	0FAH
		BTFSC	STATUS,CY	; Skip if no carry
		GOTO	c05Dc
		ADDLW	006H
		CALL	c056c
		MOVWF	0EH
		GOTO	c05Dc

c056c:		ADDWF	PCL,F		; Relative addressing
		RETLW	040H		; '@'
		RETLW	012H
		RETLW	052H		; 'R'
		RETLW	01BH
		RETLW	05BH		; '['
		RETLW	03FH		; '?'

c05Dc:		MOVF	PORTB,W
		CALL	c101c
		MOVLW	080H
		CALL	c0CDc
		MOVF	22H,W
		MOVWF	PORTB
		MOVLW	007H
		CALL	c08Cc
		MOVF	PORTB,W
		CALL	c101c
		MOVF	0EH,W
		CALL	c0C6c
		MOVF	22H,W
		MOVWF	PORTB
		MOVLW	004H
		CALL	c09Bc
		GOTO	c11Ac

c06Ec:		MOVLW	012H
		CALL	c0B1c
		MOVF	12H,W
		CALL	c101c
		MOVLW	007H
		CALL	c0CDc
		MOVF	22H,W
		MOVWF	0CH
		MOVF	13H,W
		CALL	c101c
		MOVLW	007H
		CALL	c0CDc
		MOVF	22H,W
		MOVWF	0DH
		MOVF	0CH,W
		CALL	c101c
		MOVLW	005H
		CALL	c0E8c
		BTFSS	STATUS,Z	; Skip if zero
		GOTO	c06Ec
		MOVF	0DH,W
		CALL	c101c
		MOVLW	005H
		CALL	c0E8c
		BTFSS	STATUS,Z	; Skip if zero
		GOTO	c06Ec
		GOTO	c049c

c089c:		MOVLW	007H
		CALL	c0A9c
		GOTO	c089c

c08Cc:		CALL	c00Cc
		XORWF	INDIR,F
		GOTO	c097c

c08Fc:		CALL	c00Cc
		BSF	FSR,07
		IORWF	INDIR,F
		GOTO	c11Ac

c093c:		CALL	c00Cc
		IORWF	INDIR,F
		GOTO	c097c

c096c:		CALL	c00Cc

c097c:		XORLW	0FFH
		BSF	FSR,07
		ANDWF	INDIR,F
		GOTO	c11Ac

c09Bc:		CLRF	23H
		MOVWF	22H
		CALL	c0E2c

c09Ec:		CLRWDT			; Clear watchdog timer
		MOVF	23H,W
		IORWF	22H,W
		BTFSC	STATUS,Z	; Skip if not zero
		RETURN			; Return from subroutine

		MOVLW	0F7H

c0A4c:		ADDLW	0FFH
		BTFSS	STATUS,Z	; Skip if zero
		GOTO	c0A4c
		CALL	c0E4c
		GOTO	c09Ec

c0A9c:		BSF	STATUS,RP0	; Select page 1 (80H - FFH)
		ANDLW	007H
		IORLW	0F8H
		MOVWF	RTCC
		SLEEP			; Clear PD-bit, put chip in sleep mode
		MOVLW	0FFH
		MOVWF	RTCC
		GOTO	c11Ac

c0B1c:		MOVWF	24H
		CALL	c104c
		CALL	c0B7c
		MOVF	24H,W
		CALL	c10Bc
		GOTO	c11Ac

c0B7c:		MOVF	23H,W
		IORWF	22H,W
		BTFSC	STATUS,Z	; Skip if not zero
		INCF	22H,F
		MOVLW	080H
		BTFSC	22H,04
		XORWF	23H,F
		BTFSC	22H,02
		XORWF	23H,F
		BTFSC	22H,01
		XORWF	23H,F
		RLF	23H,W
		RLF	22H,F
		RLF	23H,F
		RETURN			; Return from subroutine


c0C6c:		CLRF	25H
		MOVWF	24H
		MOVF	24H,W
		IORWF	22H,F
		MOVF	25H,W
		IORWF	23H,F
		GOTO	c11Ac

c0CDc:		CLRF	25H
		MOVWF	24H
		MOVF	24H,W
		ANDWF	22H,F
		MOVF	25H,W
		ANDWF	23H,F
		GOTO	c11Ac

c0D4c:		CLRF	25H
		MOVWF	24H
		MOVLW	022H
		MOVWF	FSR
		MOVF	24H,W
		ADDWF	INDIR,F
		MOVF	25H,W
		INCFSZ	FSR,F
		NOP	
		BTFSC	STATUS,CY	; Skip if no carry
		ADDLW	001H
		BTFSS	STATUS,CY	; Skip if carry set
		ADDWF	INDIR,F
		GOTO	c11Ac

c0E2c:		COMF	23H,F
		COMF	22H,F

c0E4c:		INCF	22H,F
		BTFSC	STATUS,Z	; Skip if not zero
		INCF	23H,F
		RETURN			; Return from subroutine


c0E8c:		CLRF	25H
		MOVWF	24H
		CALL	c0F2c
		ANDLW	001H
		GOTO	c11Ac

c0EDc:		CLRF	25H
		MOVWF	24H
		CALL	c0F2c
		ANDLW	002H
		GOTO	c11Ac

c0F2c:		MOVF	25H,W
		SUBWF	23H,W
		BTFSS	STATUS,Z	; Skip if zero
		GOTO	c0FAc
		MOVF	24H,W
		SUBWF	22H,W
		BTFSC	STATUS,Z	; Skip if not zero
		RETLW	002H

c0FAc:		BTFSS	STATUS,CY	; Skip if carry set
		RETLW	004H
		RETLW	001H

c0FDc:		XORLW	0FFH
		BSF	STATUS,RP0	; Select page 1 (80H - FFH)
		MOVWF	PORTB
		GOTO	c11Ac

c101c:		CLRF	23H
		MOVWF	22H
		GOTO	c11Ac

c104c:		MOVWF	FSR
		MOVF	INDIR,W
		MOVWF	22H
		INCF	FSR,F
		MOVF	INDIR,W
		MOVWF	23H
		GOTO	c11Ac

c10Bc:		MOVWF	FSR
		MOVF	22H,W
		MOVWF	INDIR
		INCF	FSR,F
		MOVF	23H,W
		MOVWF	INDIR
		GOTO	c11Ac

c112c:		CALL	c00Dc
		MOVWF	29H
		ANDWF	INDIR,W
		BTFSC	FSR,07
		XORWF	29H,W
		BTFSC	STATUS,Z	; Skip if not zero
		RETLW	000H
		RETLW	001H

c11Ac:		BCF	STATUS,RP0	; Select page 0 (00H - 7FH)
		CLRWDT			; Clear watchdog timer
		RETURN			; Return from subroutine


		ORG	2000H

		DATA	007F
		DATA	007F
		DATA	007F
		DATA	007F

		ORG	2007H

		DATA	3FFD
		DATA	0001

		END