;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SHIPS GAME FOR HF-6030
;
;  KOMPATYBILNOŚĆ: HF-6030
;  STATUS: działa!
;  MAPA: 01
;
;  INSTRUKCJA: cel należy podac po znaku zapytania
;  w formacie litera-cyfra A-J/1-0 gdzie 0 = 10
;  Program odpowiada:
;  P - pudło
;  C - cel trafiony i podaje liczbę masztów (01-04)
;  W - wygrana - gra zakończyła się, wszystkie statki
;      zniszczone, jako parametr zwraca liczbę ruchów
;  E - error - pole było już ostrzelane wcześniej
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

include 'HAVR_INS30.ASM'

A	equ	0x01	      ; 1 masztowiec  4 x 1 x 1 = 4 pkt
B	equ	0x02	      ; 2 masztowiec  3 x 2 x 2 = 12 pkt
C	equ	0x03	      ; 3 masztowiec  2 x 3 x 3 = 18 pkt
D	equ	0x04	      ; 4 masztowiec  1 x 4 x 4 = 16 pkt
Z	equ	0xFF	      ; pole trafione


ADR	ENTRY_POINT

	START
	WRT	FILE_NAME

PODAJ_CEL:
	DEL1
	WRT	_podaj
	KBD		; LITERA
	LDB	0x41
	SUB
	MOVCA
	LDA	0
ADDLP:
	LDB	10
	ADD
	LOOP	ADDLP

	MOVDA
	KBD		; LICZBA
	LDB	0x31
	SUB
	CPBNE	0xFF, OK     ; KOREKCJA DLA 0 = 10
	LDA	9
OK:
	MOVBD
	ADD		     ; ADR RELATYWNY
	LDB	game_map
	ADD		     ; ADR ABSOLUTNY
	PHA
	ST	$+2
	LD	0	     ; A = WARTOŚĆ POLA
CHECK:
	CPBNE	Z, CHECK1
	PPE			; KOREKCJA STOSU
	WRT	_error		; pole już było wcześniej ostrzelane
	JMP	PODAJ_CEL
CHECK1:
	PHA
	LD	ruchy
	INC
	ST	ruchy
	PPA

	CPBNE	A, CHECK2
	JMP	TRAFIONY
CHECK2:
	CPBNE	B, CHECK3
	JMP	TRAFIONY
CHECK3:
	CPBNE	C, CHECK4
	JMP	TRAFIONY
CHECK4:
	CPBNE	D, PUDLO
	JMP	TRAFIONY
PUDLO:
	PPA			; ADR ABSOLUTNY
	ST	$+4		; zapis dynamicznego adresu
	LDA	Z
	ST	0		; SKASUJ POLE JAKO TRAFIONE
	WRT	_pudlo
	JMP	PODAJ_CEL

TRAFIONY:
	PHA			; PUNKT
	PHA
	LD	punkty
	PPB
	SUB
	ST	punkty
	WRT	_cel
	PPA
	DSP
	PPA		       ; ADR ABSOLUTNY
	ST	$+4		; zapis dynamicznego adresu
	LDA	Z
	ST	0		; SKASUJ MASZT
	LD	punkty
	CPBNE	0, PODAJ_CEL
WYGRANA:
	WRT	_final
	LD	ruchy
	ST	$+2
	WRS	0
	END


punkty:     db	50
ruchy:	    db	0
_podaj:     db	"?",0
_error:     db	"E",0
_pudlo:     db	"P",0
_cel:	    db	"C",0
_final:     db	"W",0


; MAPA
db	'M',1
game_map:
;       1 2 3 4 5 6 7 8 9 0
db	A,0,0,0,0,B,0,0,0,0	; A
db	0,0,0,0,0,B,0,0,0,0	; B
db	0,0,0,A,0,0,0,0,B,B	; C
db	0,0,0,0,0,0,0,0,0,0	; D
db	0,C,C,C,0,0,A,0,0,0	; E
db	0,0,0,0,0,0,0,0,0,0	; F
db	C,0,0,D,0,0,0,B,0,0	; G
db	C,0,0,D,0,0,0,B,0,0	; H
db	C,0,0,D,0,0,0,0,0,0	; I
db	0,0,0,D,0,0,A,0,0,0	; J


	INFO_SECTION

ADR	FILE_NAME
	db 'SHIPS01',0

	FILE_END
