mirror of
https://github.com/a2-4am/million-perfect-letters.git
synced 2025-02-13 16:30:32 +00:00
initial import
This commit is contained in:
parent
f65d79efe2
commit
55ab780ddb
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.DS_Store
|
||||
/build/
|
37
Makefile
Normal file
37
Makefile
Normal file
@ -0,0 +1,37 @@
|
||||
#
|
||||
# Million Perfect Letters makefile
|
||||
# assembles source code, optionally builds a disk image and mounts it
|
||||
#
|
||||
# original by Quinn Dunki on 2014-08-15
|
||||
# One Girl, One Laptop Productions
|
||||
# http://www.quinndunki.com/blondihacks
|
||||
#
|
||||
# adapted by 4am on 2020-04-16
|
||||
#
|
||||
|
||||
# third-party tools required to build
|
||||
|
||||
# https://sourceforge.net/projects/acme-crossass/
|
||||
ACME=acme
|
||||
|
||||
# https://www.brutaldeluxe.fr/products/crossdevtools/cadius/
|
||||
# https://github.com/sicklittlemonkey/cadius
|
||||
# version 1.4.0 or later
|
||||
CADIUS=cadius
|
||||
|
||||
BUILDDISK=build/million
|
||||
|
||||
asm:
|
||||
mkdir -p build
|
||||
$(ACME) -r build/million.lst src/million.a 2>build/log
|
||||
cp res/work.po "$(BUILDDISK)".po >build/log
|
||||
cp res/_FileInformation.txt build/ >build/log
|
||||
$(CADIUS) ADDFILE "${BUILDDISK}".po "/MILLION/" "build/MILLION.SYSTEM" >build/log
|
||||
|
||||
clean:
|
||||
rm -rf build/
|
||||
|
||||
mount:
|
||||
open "$(BUILDDISK)".po
|
||||
|
||||
all: clean asm mount
|
BIN
res/Courier Double Prime/courier-prime-specimen.png
Normal file
BIN
res/Courier Double Prime/courier-prime-specimen.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 2.6 KiB |
BIN
res/Courier Double Prime/courier-prime-specimen.xcf
Normal file
BIN
res/Courier Double Prime/courier-prime-specimen.xcf
Normal file
Binary file not shown.
28
res/Courier Double Prime/font.py
Executable file
28
res/Courier Double Prime/font.py
Executable file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def myhex(bitstring):
|
||||
return hex(int(bitstring, 2))[2:].rjust(2, "0").upper()
|
||||
|
||||
leftdata = [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ]
|
||||
rightdata = [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ]
|
||||
with open("font.txt", "r") as f:
|
||||
for c in 'ABCDEFGHJIKLMNOPQRSTUVWXYZ':
|
||||
#print(c)
|
||||
for row in range(16):
|
||||
left = f.read(7)
|
||||
right = f.read(7)
|
||||
f.readline()
|
||||
left = "0b1" + left[::-1]
|
||||
right = "0b1" + right[::-1]
|
||||
#print(myhex(left), myhex(right))
|
||||
leftdata[row].append(myhex(left))
|
||||
rightdata[row].append(myhex(right))
|
||||
print("; This file is automatically generated")
|
||||
for row in range(16):
|
||||
print("LeftFontRow%s" % row)
|
||||
for c, i in zip(leftdata[row], range(len(leftdata[row]))):
|
||||
print(" !byte $%s ; %s" % (c, chr(i+65)))
|
||||
for row in range(16):
|
||||
print("RightFontRow%s" % row)
|
||||
for c, i in zip(rightdata[row], range(len(rightdata[row]))):
|
||||
print(" !byte $%s ; %s" % (c, chr(i+65)))
|
416
res/Courier Double Prime/font.txt
Normal file
416
res/Courier Double Prime/font.txt
Normal file
@ -0,0 +1,416 @@
|
||||
00000000000000
|
||||
00111111100000
|
||||
00111111110000
|
||||
00111111110000
|
||||
00001111110000
|
||||
00001110111000
|
||||
00001100111000
|
||||
00011100111000
|
||||
00011111111100
|
||||
00011111111100
|
||||
00111111111100
|
||||
00111000001110
|
||||
11111100111111
|
||||
11111100111111
|
||||
11111100111111
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111110000
|
||||
01111111111000
|
||||
01111111111100
|
||||
00011100011100
|
||||
00011100011100
|
||||
00011111111000
|
||||
00011111111000
|
||||
00011111111100
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011100001110
|
||||
01111111111110
|
||||
01111111111100
|
||||
01111111111000
|
||||
00000000000000
|
||||
00000000000000
|
||||
00000111101110
|
||||
00011111111110
|
||||
00111111111110
|
||||
00111100011110
|
||||
01111000001110
|
||||
01110000001110
|
||||
01110000000000
|
||||
01110000000000
|
||||
01110000000000
|
||||
01111000000000
|
||||
00111100001110
|
||||
00111111111110
|
||||
00011111111110
|
||||
00000111111000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111110000
|
||||
01111111111100
|
||||
01111111111110
|
||||
00011100011110
|
||||
00011100001111
|
||||
00011100000111
|
||||
00011100000111
|
||||
00011100000111
|
||||
00011100000111
|
||||
00011100001111
|
||||
00011100011110
|
||||
01111111111110
|
||||
01111111111100
|
||||
01111111110000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111111110
|
||||
01111111111110
|
||||
01111111111110
|
||||
00011100001110
|
||||
00011100000000
|
||||
00011111100000
|
||||
00011111110000
|
||||
00011111100000
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011100001110
|
||||
01111111111110
|
||||
01111111111110
|
||||
01111111111110
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111111110
|
||||
01111111111110
|
||||
01111111111110
|
||||
00011100001110
|
||||
00011100000000
|
||||
00011100000000
|
||||
00011111110000
|
||||
00011111110000
|
||||
00011111110000
|
||||
00011100000000
|
||||
00011100000000
|
||||
01111111100000
|
||||
01111111100000
|
||||
01111111100000
|
||||
00000000000000
|
||||
00000000000000
|
||||
00000111101110
|
||||
00011111111110
|
||||
00111111111110
|
||||
00111100011110
|
||||
01111000001110
|
||||
01110000001110
|
||||
01110000000000
|
||||
01110001111111
|
||||
01110001111111
|
||||
01111001111111
|
||||
00111100001110
|
||||
00111111111110
|
||||
00011111111110
|
||||
00000111111000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111100111110
|
||||
01111100111110
|
||||
01111100111110
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111111111100
|
||||
00111111111100
|
||||
00111111111100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
01111100111110
|
||||
01111100111110
|
||||
01111100111110
|
||||
00000000000000
|
||||
00000000000000
|
||||
00111111111000
|
||||
01111111111100
|
||||
00111111111000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
00000111000000
|
||||
01111111111100
|
||||
01111111111100
|
||||
01111111111100
|
||||
00000000000000
|
||||
00000000000000
|
||||
00001111111111
|
||||
00001111111111
|
||||
00001111111111
|
||||
00000000111000
|
||||
00000000111000
|
||||
00000000111000
|
||||
00000000111000
|
||||
01110000111000
|
||||
01110000111000
|
||||
01110000111000
|
||||
01111001111000
|
||||
01111111111000
|
||||
00111111110000
|
||||
00011111100000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111110111110
|
||||
01111110111111
|
||||
01111110111111
|
||||
00011100011100
|
||||
00011100111000
|
||||
00011101110000
|
||||
00011111100000
|
||||
00011111111000
|
||||
00011111111000
|
||||
00011100011100
|
||||
00011100011100
|
||||
01111111001111
|
||||
01111111001111
|
||||
01111111000111
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111100000
|
||||
01111111100000
|
||||
01111111100000
|
||||
00011100000000
|
||||
00011100000000
|
||||
00011100000000
|
||||
00011100000100
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011100001110
|
||||
01111111111110
|
||||
01111111111110
|
||||
01111111111110
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111000001111
|
||||
01111100011111
|
||||
01111100011111
|
||||
00111110111110
|
||||
00111110111110
|
||||
00111110111110
|
||||
00111011101110
|
||||
00111011101110
|
||||
00111011101110
|
||||
00111001001110
|
||||
00111000001110
|
||||
01111110111111
|
||||
01111110111111
|
||||
01111110111111
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111000111110
|
||||
01111100111110
|
||||
00111110011100
|
||||
00111110011100
|
||||
00111110011100
|
||||
00111011011100
|
||||
00111011011100
|
||||
00111001111100
|
||||
00111001111100
|
||||
00111000111100
|
||||
00111000111100
|
||||
01111100011100
|
||||
01111100011100
|
||||
01111100001100
|
||||
00000000000000
|
||||
00000000000000
|
||||
00000111110000
|
||||
00011111111100
|
||||
00111111111110
|
||||
00111100011110
|
||||
01111000001111
|
||||
01110000000111
|
||||
01110000000111
|
||||
01110000000111
|
||||
01110000000111
|
||||
01111000001111
|
||||
00111000011110
|
||||
00111111111110
|
||||
00011111111100
|
||||
00000111110000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111110000
|
||||
01111111111100
|
||||
01111111111100
|
||||
00011100011110
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011100011110
|
||||
00011111111110
|
||||
00011111111100
|
||||
00011111110000
|
||||
00011100000000
|
||||
01111111100000
|
||||
01111111100000
|
||||
01111111100000
|
||||
00000000000000
|
||||
00001111110000
|
||||
00011111111000
|
||||
00111111111100
|
||||
00111000011100
|
||||
01110000001110
|
||||
01110000001110
|
||||
01110000001110
|
||||
01110000001110
|
||||
00111000011100
|
||||
00111111111100
|
||||
00011111111000
|
||||
00000111110000
|
||||
00001100000100
|
||||
00011111111110
|
||||
00111111111110
|
||||
00111111111100
|
||||
00000000000000
|
||||
01111111111000
|
||||
01111111111100
|
||||
01111111111110
|
||||
00011100011110
|
||||
00011100001110
|
||||
00011100001110
|
||||
00011111111100
|
||||
00011111111000
|
||||
00011111111000
|
||||
00011100111100
|
||||
00011100011110
|
||||
01111111011111
|
||||
01111111001111
|
||||
01111111000111
|
||||
00000000000000
|
||||
00000000000000
|
||||
00001111011000
|
||||
00011111111000
|
||||
00111111111000
|
||||
00111000011000
|
||||
00111000000000
|
||||
00111100000000
|
||||
00011111110000
|
||||
00000111111000
|
||||
00000000111100
|
||||
00110000011100
|
||||
00111000011100
|
||||
00111111111100
|
||||
00111111111000
|
||||
00111011110000
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111111111110
|
||||
01111111111110
|
||||
01111111111110
|
||||
01110011101110
|
||||
01110011101110
|
||||
01110011101110
|
||||
01110011101110
|
||||
00000011100000
|
||||
00000011100000
|
||||
00000011100000
|
||||
00000011100000
|
||||
00011111111100
|
||||
00011111111100
|
||||
00011111111100
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111100111110
|
||||
01111100111110
|
||||
01111100111110
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111000011100
|
||||
00111100111100
|
||||
00111111111100
|
||||
00011111111000
|
||||
00001111110000
|
||||
00000000000000
|
||||
00000000000000
|
||||
11111100111111
|
||||
11111100111111
|
||||
11111100111111
|
||||
00111000001110
|
||||
00111000011100
|
||||
00011100011100
|
||||
00011100111100
|
||||
00011100111000
|
||||
00001110111000
|
||||
00001111110000
|
||||
00000111110000
|
||||
00000111100000
|
||||
00000111100000
|
||||
00000011100000
|
||||
00000000000000
|
||||
00000000000000
|
||||
11111100011111
|
||||
11111100011111
|
||||
11111100011111
|
||||
01110000000111
|
||||
00110001000110
|
||||
00110011100110
|
||||
00110011100110
|
||||
00110111110110
|
||||
00110110110110
|
||||
00111110111110
|
||||
00111100111110
|
||||
00111100011110
|
||||
00111100011100
|
||||
00011000011100
|
||||
00000000000000
|
||||
00000000000000
|
||||
01111110111111
|
||||
01111110111111
|
||||
01111110111111
|
||||
00011100011100
|
||||
00001110111000
|
||||
00001111110000
|
||||
00000111100000
|
||||
00000111110000
|
||||
00001111110000
|
||||
00011100111000
|
||||
00111000011100
|
||||
11111100111111
|
||||
11111100111111
|
||||
11111100111111
|
||||
00000000000000
|
||||
00000000000000
|
||||
11111100111111
|
||||
11111100111111
|
||||
11111100111111
|
||||
00111000011100
|
||||
00011100111100
|
||||
00001111111000
|
||||
00001111110000
|
||||
00000111110000
|
||||
00000011100000
|
||||
00000011100000
|
||||
00000011100000
|
||||
00011111111100
|
||||
00011111111100
|
||||
00011111111100
|
||||
00000000000000
|
||||
00000000000000
|
||||
00111111111100
|
||||
00111111111100
|
||||
00111111111000
|
||||
00111000111000
|
||||
00111000110000
|
||||
00111001100000
|
||||
00000011000000
|
||||
00000110000000
|
||||
00000110011100
|
||||
00001100011100
|
||||
00011000011100
|
||||
00111111111100
|
||||
00111111111100
|
||||
00111111111100
|
||||
00000000000000
|
1
res/_FileInformation.txt
Normal file
1
res/_FileInformation.txt
Normal file
@ -0,0 +1 @@
|
||||
MILLION.SYSTEM=Type(FF),AuxType(2000),Access(C3)
|
130
res/levels/A
Normal file
130
res/levels/A
Normal file
@ -0,0 +1,130 @@
|
||||
# 4x3, easy
|
||||
ARUH
|
||||
WLCM
|
||||
BHOR
|
||||
|
||||
ARCH
|
||||
BLUR
|
||||
WHOM
|
||||
--
|
||||
UPUG
|
||||
THGE
|
||||
WAON
|
||||
|
||||
THUG
|
||||
UPON
|
||||
WAGE
|
||||
--
|
||||
SGOY
|
||||
AANT
|
||||
ZHES
|
||||
|
||||
AGES
|
||||
SHOT
|
||||
ZANY
|
||||
--
|
||||
EARY
|
||||
RECB
|
||||
HPIC
|
||||
|
||||
EPIC
|
||||
HERB
|
||||
RACY
|
||||
--
|
||||
NSVB
|
||||
BAMR
|
||||
UOEY
|
||||
|
||||
BOMB
|
||||
NAVY
|
||||
USER
|
||||
--
|
||||
GVAE
|
||||
ESIR
|
||||
IELL
|
||||
|
||||
EVIL
|
||||
GEAR
|
||||
ISLE
|
||||
--
|
||||
IIAA
|
||||
CDEL
|
||||
DASE
|
||||
|
||||
CASE
|
||||
DIAL
|
||||
IDEA
|
||||
--
|
||||
IECF
|
||||
RHET
|
||||
WTAH
|
||||
|
||||
ITCH
|
||||
REEF
|
||||
WHAT
|
||||
--
|
||||
SOLA
|
||||
EIAM
|
||||
VXSO
|
||||
|
||||
EXAM
|
||||
SOLO
|
||||
VISA
|
||||
--
|
||||
TLGE
|
||||
UROM
|
||||
SERP
|
||||
|
||||
SLOP
|
||||
TERM
|
||||
URGE
|
||||
--
|
||||
CNFP
|
||||
SDIF
|
||||
EUGY
|
||||
|
||||
CUFF
|
||||
EDGY
|
||||
SNIP
|
||||
--
|
||||
IYTN
|
||||
SUOC
|
||||
CCNE
|
||||
|
||||
CUTE
|
||||
ICON
|
||||
SYNC
|
||||
--
|
||||
RYDE
|
||||
EHIS
|
||||
CIEC
|
||||
|
||||
CHIC
|
||||
EYES
|
||||
RIDE
|
||||
--
|
||||
PRCX
|
||||
LYLS
|
||||
AONO
|
||||
|
||||
ARCS
|
||||
LYNX
|
||||
POLO
|
||||
--
|
||||
LARR
|
||||
SVEY
|
||||
OPMB
|
||||
|
||||
LAMB
|
||||
OVER
|
||||
SPRY
|
||||
--
|
||||
BEOK
|
||||
ASRS
|
||||
JRPW
|
||||
|
||||
ASPS
|
||||
BROW
|
||||
JERK
|
||||
--
|
||||
[eof]
|
130
res/levels/B
Normal file
130
res/levels/B
Normal file
@ -0,0 +1,130 @@
|
||||
# 5x3, easy
|
||||
KUADL
|
||||
FREEY
|
||||
GNNNE
|
||||
|
||||
FUNNY
|
||||
GRADE
|
||||
KNEEL
|
||||
--
|
||||
EIAIS
|
||||
MRJEY
|
||||
GNLON
|
||||
|
||||
ENJOY
|
||||
GRAIN
|
||||
MILES
|
||||
--
|
||||
SACDY
|
||||
LUOES
|
||||
MTDMP
|
||||
|
||||
LACES
|
||||
MUDDY
|
||||
STOMP
|
||||
--
|
||||
RHUCY
|
||||
TEEMT
|
||||
ELPAP
|
||||
|
||||
ELECT
|
||||
REPAY
|
||||
THUMP
|
||||
--
|
||||
RALLH
|
||||
STDIO
|
||||
MUYCE
|
||||
|
||||
MULCH
|
||||
RADIO
|
||||
STYLE
|
||||
--
|
||||
MIELD
|
||||
BOMMY
|
||||
WUAST
|
||||
|
||||
BOAST
|
||||
MUMMY
|
||||
WIELD
|
||||
--
|
||||
SOUNG
|
||||
YSSAS
|
||||
EHOWY
|
||||
|
||||
ESSAY
|
||||
SHOWS
|
||||
YOUNG
|
||||
--
|
||||
MOBND
|
||||
HLVUA
|
||||
AYEEM
|
||||
|
||||
ALBUM
|
||||
HYENA
|
||||
MOVED
|
||||
--
|
||||
CITTH
|
||||
SNUED
|
||||
AONUL
|
||||
|
||||
ANNUL
|
||||
CITED
|
||||
SOUTH
|
||||
--
|
||||
AEAER
|
||||
NINDE
|
||||
FBESY
|
||||
|
||||
ABASE
|
||||
FINER
|
||||
NEEDY
|
||||
--
|
||||
OBIRK
|
||||
QPBNT
|
||||
AUEOS
|
||||
|
||||
ABBOT
|
||||
OPENS
|
||||
QUIRK
|
||||
--
|
||||
AUSLW
|
||||
BEGEE
|
||||
RRNON
|
||||
|
||||
ARSON
|
||||
BUGLE
|
||||
RENEW
|
||||
--
|
||||
THDED
|
||||
FEIGH
|
||||
CUNKY
|
||||
|
||||
CEDED
|
||||
FUNKY
|
||||
THIGH
|
||||
--
|
||||
FRADY
|
||||
RECHE
|
||||
NIILL
|
||||
|
||||
FRILL
|
||||
NICHE
|
||||
READY
|
||||
--
|
||||
OPUDN
|
||||
ATTCK
|
||||
SUROO
|
||||
|
||||
APRON
|
||||
OUTDO
|
||||
STUCK
|
||||
--
|
||||
NECNG
|
||||
UNXUE
|
||||
WROLS
|
||||
|
||||
NEXUS
|
||||
UNCLE
|
||||
WRONG
|
||||
--
|
||||
[eof]
|
130
res/levels/C
Normal file
130
res/levels/C
Normal file
@ -0,0 +1,130 @@
|
||||
# 6x3, easy
|
||||
OBPGIR
|
||||
LAJEET
|
||||
NONKCN
|
||||
|
||||
LONGER
|
||||
NAPKIN
|
||||
OBJECT
|
||||
--
|
||||
BUTIEE
|
||||
PNODPD
|
||||
URNMLT
|
||||
|
||||
BUNDLE
|
||||
PROMPT
|
||||
UNTIED
|
||||
--
|
||||
TSUPTT
|
||||
FAIOOD
|
||||
ERCLRY
|
||||
|
||||
ESCORT
|
||||
FAULTY
|
||||
TRIPOD
|
||||
--
|
||||
JIEEGD
|
||||
CVLTRE
|
||||
AAVNEN
|
||||
|
||||
AVENGE
|
||||
CAVERN
|
||||
JILTED
|
||||
--
|
||||
EIAZER
|
||||
SSCROS
|
||||
PLMMAW
|
||||
|
||||
ESCROW
|
||||
PLAZAS
|
||||
SIMMER
|
||||
--
|
||||
MUFDUY
|
||||
DPSEAR
|
||||
SEIREM
|
||||
|
||||
DEFRAY
|
||||
MUSEUM
|
||||
SPIDER
|
||||
--
|
||||
PPIAEA
|
||||
SNSNYS
|
||||
IAPURE
|
||||
|
||||
INSURE
|
||||
PAPAYA
|
||||
SPINES
|
||||
--
|
||||
CICAIC
|
||||
POBRTS
|
||||
ORNNAE
|
||||
|
||||
COBRAS
|
||||
ORNATE
|
||||
PICNIC
|
||||
--
|
||||
NBBLTD
|
||||
EEURON
|
||||
AYEOIS
|
||||
|
||||
ABBOTS
|
||||
EYELID
|
||||
NEURON
|
||||
--
|
||||
TIPTLE
|
||||
REROAT
|
||||
VULLRS
|
||||
|
||||
REPORT
|
||||
TURTLE
|
||||
VILLAS
|
||||
--
|
||||
WATCHL
|
||||
UNCGOY
|
||||
PEDOES
|
||||
|
||||
PATCHY
|
||||
UNCOOL
|
||||
WEDGES
|
||||
--
|
||||
DAPOFF
|
||||
FULEOD
|
||||
CETCNN
|
||||
|
||||
CUTOFF
|
||||
DEPEND
|
||||
FALCON
|
||||
--
|
||||
ORGTOY
|
||||
WOAUSR
|
||||
LICGLT
|
||||
|
||||
LOCUST
|
||||
ORATOR
|
||||
WIGGLY
|
||||
--
|
||||
ZETTTD
|
||||
FANIEH
|
||||
CLOWLE
|
||||
|
||||
CATTLE
|
||||
FLOWED
|
||||
ZENITH
|
||||
--
|
||||
PLAIET
|
||||
CURKVO
|
||||
STCNOE
|
||||
|
||||
CUCKOO
|
||||
PLANET
|
||||
STRIVE
|
||||
--
|
||||
OONOIR
|
||||
MUTTOS
|
||||
REBBTD
|
||||
|
||||
MENTOR
|
||||
OUTBID
|
||||
ROBOTS
|
||||
--
|
||||
[eof]
|
130
res/levels/D
Normal file
130
res/levels/D
Normal file
@ -0,0 +1,130 @@
|
||||
# 7x3, easy
|
||||
PRTFELE
|
||||
MHERINS
|
||||
SIOTBET
|
||||
|
||||
MITTENS
|
||||
PROFILE
|
||||
SHERBET
|
||||
--
|
||||
ELSNTNG
|
||||
DSOTIRS
|
||||
CITAOET
|
||||
|
||||
CLONING
|
||||
DISTORT
|
||||
ESTATES
|
||||
--
|
||||
CUNVERE
|
||||
DOCTATD
|
||||
GIESSET
|
||||
|
||||
CONVERT
|
||||
DICTATE
|
||||
GUESSED
|
||||
--
|
||||
GSAISRE
|
||||
AUSFTED
|
||||
SLNTITS
|
||||
|
||||
ASSISTS
|
||||
GUNFIRE
|
||||
SLATTED
|
||||
--
|
||||
CAPLICG
|
||||
SLOAKED
|
||||
PREFENT
|
||||
|
||||
CLOAKED
|
||||
PREFECT
|
||||
SAPLING
|
||||
--
|
||||
UNECEEY
|
||||
BRSVITN
|
||||
DIDATRD
|
||||
|
||||
BREVITY
|
||||
DISCERN
|
||||
UNDATED
|
||||
--
|
||||
ASEVTIS
|
||||
SMARATL
|
||||
PRSERLY
|
||||
|
||||
ASSERTS
|
||||
PREVAIL
|
||||
SMARTLY
|
||||
--
|
||||
BHAVDEY
|
||||
ANNUITO
|
||||
SRUDADR
|
||||
|
||||
ANNUITY
|
||||
BRAVADO
|
||||
SHUDDER
|
||||
--
|
||||
AQVGRNC
|
||||
COUEIUP
|
||||
BEGATIG
|
||||
|
||||
AQUATIC
|
||||
BEGGING
|
||||
COVERUP
|
||||
--
|
||||
HIATFUD
|
||||
PUSPHNR
|
||||
SETIEEL
|
||||
|
||||
HEATHER
|
||||
PITIFUL
|
||||
SUSPEND
|
||||
--
|
||||
KIASOEP
|
||||
SHNTHIS
|
||||
PERITDR
|
||||
|
||||
KINSHIP
|
||||
PERIODS
|
||||
SHATTER
|
||||
--
|
||||
VRTFPEA
|
||||
CIAATID
|
||||
TELERAN
|
||||
|
||||
CRAFTED
|
||||
TILAPIA
|
||||
VETERAN
|
||||
--
|
||||
HEGIAAO
|
||||
MVRDCRL
|
||||
AAOCEDS
|
||||
|
||||
AVOCADO
|
||||
HERDERS
|
||||
MAGICAL
|
||||
--
|
||||
TAIPASE
|
||||
AEUTLIT
|
||||
MGMDETN
|
||||
|
||||
AGITATE
|
||||
MAUDLIN
|
||||
TEMPEST
|
||||
--
|
||||
GPLLERC
|
||||
DYARMAN
|
||||
SANATIY
|
||||
|
||||
DYNAMIC
|
||||
GALLERY
|
||||
SPARTAN
|
||||
--
|
||||
DEAUUEL
|
||||
STCLNSH
|
||||
MOLIBCK
|
||||
|
||||
DECIBEL
|
||||
MOLLUSK
|
||||
STAUNCH
|
||||
--
|
||||
[eof]
|
179
res/levels/E
Normal file
179
res/levels/E
Normal file
@ -0,0 +1,179 @@
|
||||
# 4x4, intermediate
|
||||
# Try to find the optimal solution
|
||||
IOLA
|
||||
ALOO
|
||||
DEEI
|
||||
HDSK
|
||||
|
||||
ALSO
|
||||
DELI
|
||||
HOOK
|
||||
IDEA
|
||||
DESK
|
||||
--
|
||||
RNDO
|
||||
UANK
|
||||
HVER
|
||||
OIGH
|
||||
|
||||
HIGH
|
||||
OVER
|
||||
RANK
|
||||
UNDO
|
||||
RINK
|
||||
--
|
||||
UDOR
|
||||
ONEM
|
||||
HUTO
|
||||
THNG
|
||||
|
||||
HUNG
|
||||
ODOR
|
||||
THEM
|
||||
UNTO
|
||||
ONTO
|
||||
--
|
||||
MATI
|
||||
OILP
|
||||
PREO
|
||||
TNXK
|
||||
|
||||
MILK
|
||||
ONTO
|
||||
PREP
|
||||
TAXI
|
||||
TALK
|
||||
--
|
||||
CULP
|
||||
EDAK
|
||||
LEGM
|
||||
FANY
|
||||
|
||||
CALM
|
||||
EDGY
|
||||
FUNK
|
||||
LEAP
|
||||
LEAK
|
||||
--
|
||||
OMIK
|
||||
IODM
|
||||
JUET
|
||||
BTNY
|
||||
|
||||
BODY
|
||||
ITEM
|
||||
JUNK
|
||||
OMIT
|
||||
BUNK
|
||||
--
|
||||
WHNR
|
||||
AVEM
|
||||
CCOE
|
||||
ELIT
|
||||
|
||||
ACNE
|
||||
CLOT
|
||||
EVER
|
||||
WHIM
|
||||
WHOM
|
||||
--
|
||||
TARY
|
||||
VIIW
|
||||
EHAC
|
||||
KPND
|
||||
|
||||
EPIC
|
||||
KIND
|
||||
THAW
|
||||
VARY
|
||||
TINY
|
||||
--
|
||||
ODGW
|
||||
SNLE
|
||||
ELTY
|
||||
MYEH
|
||||
|
||||
EDGE
|
||||
MYTH
|
||||
ONLY
|
||||
SLEW
|
||||
EDGY
|
||||
--
|
||||
EHOS
|
||||
PIIE
|
||||
MLCT
|
||||
CNDC
|
||||
|
||||
CHIC
|
||||
ENDS
|
||||
MICE
|
||||
PLOT
|
||||
CLOT
|
||||
--
|
||||
AIUC
|
||||
DCMD
|
||||
SRSN
|
||||
IPEY
|
||||
|
||||
ARMY
|
||||
DISC
|
||||
ICED
|
||||
SPUN
|
||||
DIED
|
||||
--
|
||||
OOHS
|
||||
ECDE
|
||||
NWLO
|
||||
TUFU
|
||||
|
||||
ECHO
|
||||
NUDE
|
||||
OWLS
|
||||
TOFU
|
||||
NODE
|
||||
--
|
||||
BILY
|
||||
GUOW
|
||||
AACD
|
||||
PNET
|
||||
|
||||
ANEW
|
||||
BUOY
|
||||
GILD
|
||||
PACT
|
||||
BALD
|
||||
--
|
||||
AVZN
|
||||
OBEZ
|
||||
MYLY
|
||||
BUTH
|
||||
|
||||
ABLY
|
||||
BUZZ
|
||||
MYTH
|
||||
OVEN
|
||||
OBEY
|
||||
--
|
||||
POHN
|
||||
NCUS
|
||||
HEEO
|
||||
ERMY
|
||||
|
||||
ECHO
|
||||
HEMS
|
||||
NOUN
|
||||
PREY
|
||||
PEES
|
||||
--
|
||||
ZUAW
|
||||
MRTO
|
||||
DERA
|
||||
TYNH
|
||||
|
||||
DRAW
|
||||
MYTH
|
||||
TUNA
|
||||
ZERO
|
||||
META
|
||||
--
|
||||
[eof]
|
179
res/levels/F
Normal file
179
res/levels/F
Normal file
@ -0,0 +1,179 @@
|
||||
# 5x4, intermediate
|
||||
# Try to find the optimal solution
|
||||
GTRIL
|
||||
SIIRY
|
||||
VVENS
|
||||
ERNYP
|
||||
|
||||
EVERY
|
||||
GRINS
|
||||
STRIP
|
||||
VINYL
|
||||
STIRS
|
||||
--
|
||||
RILIT
|
||||
CUIEA
|
||||
DGBNG
|
||||
AOGRR
|
||||
|
||||
AGING
|
||||
COBRA
|
||||
DIGIT
|
||||
RULER
|
||||
DOING
|
||||
--
|
||||
MXTCK
|
||||
KNYRR
|
||||
CAIOA
|
||||
ELAMB
|
||||
|
||||
CLIMB
|
||||
EXTRA
|
||||
KNACK
|
||||
MAYOR
|
||||
CLICK
|
||||
--
|
||||
ABIOO
|
||||
OADTT
|
||||
DLOSY
|
||||
PHBER
|
||||
|
||||
ABBOT
|
||||
DAISY
|
||||
OLDER
|
||||
PHOTO
|
||||
ABBEY
|
||||
--
|
||||
AOUON
|
||||
GYAZH
|
||||
NATCE
|
||||
LMLRD
|
||||
|
||||
AMAZE
|
||||
GOURD
|
||||
LATCH
|
||||
NYLON
|
||||
NOTCH
|
||||
--
|
||||
BRUSG
|
||||
FUZNE
|
||||
YAAON
|
||||
EORZY
|
||||
|
||||
BARON
|
||||
ERASE
|
||||
FUZZY
|
||||
YOUNG
|
||||
BORNE
|
||||
--
|
||||
JAIDP
|
||||
CUDOS
|
||||
ILUME
|
||||
RGLGO
|
||||
|
||||
CLUMP
|
||||
IGLOO
|
||||
JUDGE
|
||||
RAIDS
|
||||
CALMS
|
||||
--
|
||||
LEIOY
|
||||
SYRBN
|
||||
FRLUP
|
||||
POBDE
|
||||
|
||||
FELON
|
||||
LOBBY
|
||||
PRIDE
|
||||
SYRUP
|
||||
PYLON
|
||||
--
|
||||
GWRSE
|
||||
ENOOH
|
||||
JASER
|
||||
AUAMD
|
||||
|
||||
AWASH
|
||||
EASED
|
||||
GNOME
|
||||
JUROR
|
||||
GNASH
|
||||
--
|
||||
LHIFL
|
||||
DAOVA
|
||||
CUNUF
|
||||
GLRKS
|
||||
|
||||
CLIFF
|
||||
DUNKS
|
||||
GHOUL
|
||||
LARVA
|
||||
LURKS
|
||||
--
|
||||
FNIUK
|
||||
THRKE
|
||||
UESOY
|
||||
PUDNR
|
||||
|
||||
FUROR
|
||||
PESKY
|
||||
THINK
|
||||
UNDUE
|
||||
PERKY
|
||||
--
|
||||
ILGFD
|
||||
FURER
|
||||
HRUOF
|
||||
SEKAN
|
||||
|
||||
FLUFF
|
||||
HERON
|
||||
IRKED
|
||||
SUGAR
|
||||
FUROR
|
||||
--
|
||||
ALPPK
|
||||
WFOUR
|
||||
BHIOS
|
||||
VAACL
|
||||
|
||||
AFOUL
|
||||
BLACK
|
||||
VAPOR
|
||||
WHIPS
|
||||
BLOCK
|
||||
--
|
||||
LBNNT
|
||||
AYBRO
|
||||
ZAOUA
|
||||
MEIGG
|
||||
|
||||
ABOUT
|
||||
LYING
|
||||
MANGO
|
||||
ZEBRA
|
||||
ABORT
|
||||
--
|
||||
SWNLA
|
||||
HAGND
|
||||
MOOUY
|
||||
RYERE
|
||||
|
||||
HYENA
|
||||
MANLY
|
||||
ROGUE
|
||||
SWORD
|
||||
SWORE
|
||||
--
|
||||
GNRPN
|
||||
MLGNR
|
||||
IOAAE
|
||||
SUYOH
|
||||
|
||||
GLYPH
|
||||
INANE
|
||||
MORON
|
||||
SUGAR
|
||||
MORPH
|
||||
--
|
||||
[eof]
|
179
res/levels/G
Normal file
179
res/levels/G
Normal file
@ -0,0 +1,179 @@
|
||||
# 6x4, intermediate
|
||||
# Try to find the optimal solution
|
||||
REASAS
|
||||
ABPOPY
|
||||
GIQLRB
|
||||
LRSUOR
|
||||
|
||||
ABSORB
|
||||
GRASPS
|
||||
LIQUOR
|
||||
REPLAY
|
||||
LESSOR
|
||||
--
|
||||
CADPIE
|
||||
OOMICY
|
||||
MRCHAC
|
||||
RENULD
|
||||
|
||||
COMPLY
|
||||
MANIAC
|
||||
ORCHID
|
||||
REDUCE
|
||||
MODULE
|
||||
--
|
||||
CXPUME
|
||||
EILCAN
|
||||
ROSOIL
|
||||
BAONSC
|
||||
|
||||
BIONIC
|
||||
COLUMN
|
||||
EXPOSE
|
||||
RASCAL
|
||||
CASUAL
|
||||
--
|
||||
RNMONS
|
||||
SLFFIX
|
||||
FEOIVE
|
||||
AUANKT
|
||||
|
||||
ANOINT
|
||||
FLANKS
|
||||
REMOVE
|
||||
SUFFIX
|
||||
REFINE
|
||||
--
|
||||
BCFSLY
|
||||
SEIITE
|
||||
AHUOED
|
||||
CLOERT
|
||||
|
||||
ACUITY
|
||||
BEFORE
|
||||
CLOSET
|
||||
SHIELD
|
||||
CLOSED
|
||||
--
|
||||
OIRHIN
|
||||
GOVEBP
|
||||
DRPSNY
|
||||
HESIAE
|
||||
|
||||
DIVINE
|
||||
GOSSIP
|
||||
HEREBY
|
||||
ORPHAN
|
||||
HEREIN
|
||||
--
|
||||
IXRODS
|
||||
BAAKRT
|
||||
ETHLID
|
||||
PLEAEC
|
||||
|
||||
BARKED
|
||||
EXHORT
|
||||
ITALIC
|
||||
PLEADS
|
||||
PARKED
|
||||
--
|
||||
ILEETT
|
||||
VROCKY
|
||||
BIFTCS
|
||||
PNRILE
|
||||
|
||||
BLOCKS
|
||||
INFECT
|
||||
PRETTY
|
||||
VIRILE
|
||||
BLOCKY
|
||||
--
|
||||
UECIYA
|
||||
GNPRIC
|
||||
POLAEE
|
||||
SATHKT
|
||||
|
||||
GOTHIC
|
||||
PAPAYA
|
||||
SECRET
|
||||
UNLIKE
|
||||
SACHET
|
||||
--
|
||||
RCRTUD
|
||||
SEFKNM
|
||||
PITAOE
|
||||
BOCUPP
|
||||
|
||||
BOTTOM
|
||||
PICKUP
|
||||
REFUND
|
||||
SCRAPE
|
||||
RECTUM
|
||||
--
|
||||
EEPHON
|
||||
CLSORA
|
||||
SNIGMT
|
||||
RIAMPS
|
||||
|
||||
CLAMPS
|
||||
ENIGMA
|
||||
RESORT
|
||||
SIPHON
|
||||
REPORT
|
||||
--
|
||||
VNONKD
|
||||
IHPTTY
|
||||
AMUIEE
|
||||
CETUNT
|
||||
|
||||
ANOINT
|
||||
CHUNKY
|
||||
IMPUTE
|
||||
VETTED
|
||||
AMOUNT
|
||||
--
|
||||
ELUOWY
|
||||
MHBLOR
|
||||
WCITSN
|
||||
OUTMAS
|
||||
|
||||
ELBOWS
|
||||
MUTTON
|
||||
OCULAR
|
||||
WHIMSY
|
||||
OUTLAY
|
||||
--
|
||||
TEMKRE
|
||||
EYEBED
|
||||
CNTNDS
|
||||
DRCIAL
|
||||
|
||||
CYMBAL
|
||||
DECKED
|
||||
ENTIRE
|
||||
TRENDS
|
||||
DECIDE
|
||||
--
|
||||
QADRTO
|
||||
IOESWT
|
||||
HUHUCS
|
||||
MNIADK
|
||||
|
||||
HAIRDO
|
||||
INDUCT
|
||||
MOHAWK
|
||||
QUESTS
|
||||
HOISTS
|
||||
--
|
||||
EIZNRE
|
||||
SOQAID
|
||||
WFFUGY
|
||||
BEUICN
|
||||
|
||||
BOUNCE
|
||||
EFFIGY
|
||||
SEQUIN
|
||||
WIZARD
|
||||
BOUNCY
|
||||
--
|
||||
[eof]
|
179
res/levels/H
Normal file
179
res/levels/H
Normal file
@ -0,0 +1,179 @@
|
||||
# 7x4, intermediate
|
||||
# Try to find the optimal solution
|
||||
BEUVATE
|
||||
MAASEIT
|
||||
SRTNLGN
|
||||
GOOWIEY
|
||||
|
||||
BETWEEN
|
||||
GRAVITY
|
||||
MOONLIT
|
||||
SAUSAGE
|
||||
GRANITE
|
||||
--
|
||||
HEGDDSD
|
||||
THNOEAS
|
||||
CITURNT
|
||||
ASEHUER
|
||||
|
||||
ASTOUND
|
||||
CHEDDAR
|
||||
HIGHEST
|
||||
TENURES
|
||||
TENURED
|
||||
--
|
||||
WNDIRAC
|
||||
BEUEMEL
|
||||
EOLNCIS
|
||||
ADMCOME
|
||||
|
||||
ADMIRAL
|
||||
BOUNCES
|
||||
ENDEMIC
|
||||
WELCOME
|
||||
ADMIRES
|
||||
--
|
||||
SUUAMES
|
||||
ULWPTPH
|
||||
BRIURDE
|
||||
TPPNOSD
|
||||
|
||||
BLUNTED
|
||||
SUPPOSE
|
||||
TRIUMPH
|
||||
UPWARDS
|
||||
TRIPODS
|
||||
--
|
||||
SLESVEC
|
||||
NMAENUL
|
||||
ETMDTIS
|
||||
IERIFSE
|
||||
|
||||
ELASTIC
|
||||
IMMENSE
|
||||
NEEDFUL
|
||||
STRIVES
|
||||
SLEEVES
|
||||
--
|
||||
WPEBARB
|
||||
RORCILE
|
||||
AHJRKET
|
||||
SDUUNCD
|
||||
|
||||
ADJUNCT
|
||||
RHUBARB
|
||||
SPECKLE
|
||||
WORRIED
|
||||
SPURNED
|
||||
--
|
||||
VEPUORD
|
||||
HRRITEK
|
||||
IMSDBNY
|
||||
AITWILG
|
||||
|
||||
ARTWORK
|
||||
HERDING
|
||||
IMPUTED
|
||||
VISIBLY
|
||||
VISITED
|
||||
--
|
||||
ILLNRNS
|
||||
SNFENMO
|
||||
FICHGGE
|
||||
AHIIELY
|
||||
|
||||
ALCHEMY
|
||||
FILINGS
|
||||
INFERNO
|
||||
SHINGLE
|
||||
ALLERGY
|
||||
--
|
||||
NCTWAOS
|
||||
IOIECNN
|
||||
OARAITG
|
||||
FNFLGRD
|
||||
|
||||
FORWARD
|
||||
INFECTS
|
||||
NAILING
|
||||
OCTAGON
|
||||
FAILING
|
||||
--
|
||||
SHHOELY
|
||||
ETTCLAS
|
||||
TXSTMMN
|
||||
OYIAKED
|
||||
|
||||
EXHALED
|
||||
OTTOMAN
|
||||
SYSTEMS
|
||||
THICKLY
|
||||
THICKEN
|
||||
--
|
||||
HNUSIHD
|
||||
STCTSTT
|
||||
WOAUGNE
|
||||
IROIUEG
|
||||
|
||||
HOUSING
|
||||
INCISED
|
||||
STATUTE
|
||||
WROUGHT
|
||||
STATING
|
||||
--
|
||||
DACEANR
|
||||
WNYTEEL
|
||||
SXEAKLS
|
||||
ERSWIDG
|
||||
|
||||
DRYWALL
|
||||
EXCEEDS
|
||||
SNEAKER
|
||||
WASTING
|
||||
EASTING
|
||||
--
|
||||
TTLEZAT
|
||||
EEGTOSR
|
||||
ADHBREL
|
||||
SUVANOE
|
||||
|
||||
ADVERSE
|
||||
ETHANOL
|
||||
SELTZER
|
||||
TUGBOAT
|
||||
SEVERAL
|
||||
--
|
||||
SITKLLE
|
||||
HUPIIOW
|
||||
THAABAS
|
||||
COSLCEL
|
||||
|
||||
CITABLE
|
||||
HUSKIES
|
||||
SHALLOW
|
||||
TOPICAL
|
||||
CUTICLE
|
||||
--
|
||||
STNIPSH
|
||||
AIOUIOR
|
||||
LNGPMEN
|
||||
DYAASIC
|
||||
|
||||
ANGUISH
|
||||
DYNAMIC
|
||||
LIAISON
|
||||
STOPPER
|
||||
SNAPPER
|
||||
--
|
||||
CRNQRAS
|
||||
AUFAIEL
|
||||
MEHFSIT
|
||||
GPOEUNA
|
||||
|
||||
APHASIA
|
||||
CROQUET
|
||||
GENERAL
|
||||
MUFFINS
|
||||
GENESIS
|
||||
--
|
||||
[eof]
|
520
res/levels/I
Normal file
520
res/levels/I
Normal file
@ -0,0 +1,520 @@
|
||||
# 4x5, advanced
|
||||
# Try to find the optimal solution
|
||||
|
||||
|
||||
|
||||
|
||||
# needs-work
|
||||
|
||||
|
||||
|
||||
|
||||
OWCS
|
||||
QOGT
|
||||
ZIOK
|
||||
URID
|
||||
KUEE
|
||||
|
||||
KICK
|
||||
OWED
|
||||
QUIT
|
||||
URGE
|
||||
ZOOS
|
||||
OWES
|
||||
--
|
||||
LHUG
|
||||
UOSM
|
||||
CTER
|
||||
NSRH
|
||||
EICP
|
||||
|
||||
CHUG
|
||||
ETCH
|
||||
LISP
|
||||
NORM
|
||||
USER
|
||||
COUP
|
||||
--
|
||||
OEIO
|
||||
KNRZ
|
||||
FHWP
|
||||
VIZI
|
||||
SUTB
|
||||
|
||||
FUZZ
|
||||
KIWI
|
||||
ONTO
|
||||
SHIP
|
||||
VERB
|
||||
SNIP
|
||||
--
|
||||
IDDR
|
||||
HUEY
|
||||
UNNH
|
||||
LISC
|
||||
ZELO
|
||||
|
||||
HUSH
|
||||
IDLY
|
||||
LEER
|
||||
UNDO
|
||||
ZINC
|
||||
LUSH
|
||||
--
|
||||
RROA
|
||||
EPAU
|
||||
OICP
|
||||
UCRN
|
||||
KEWI
|
||||
|
||||
ECRU
|
||||
KIWI
|
||||
ORCA
|
||||
REAP
|
||||
UPON
|
||||
KERN
|
||||
--
|
||||
FHZK
|
||||
DAOE
|
||||
CUEP
|
||||
ACAY
|
||||
IWCD
|
||||
|
||||
AWAY
|
||||
CHOP
|
||||
DUCK
|
||||
FAZE
|
||||
ICED
|
||||
FACE
|
||||
--
|
||||
OKEA
|
||||
UROM
|
||||
ITRD
|
||||
CEGG
|
||||
MLLE
|
||||
|
||||
CLOG
|
||||
ITEM
|
||||
MELD
|
||||
OKRA
|
||||
URGE
|
||||
MERE
|
||||
--
|
||||
EERY
|
||||
CUHB
|
||||
OLET
|
||||
GCFN
|
||||
LNLO
|
||||
|
||||
CURB
|
||||
ECHO
|
||||
GLEN
|
||||
LEFT
|
||||
ONLY
|
||||
CULT
|
||||
--
|
||||
SUCO
|
||||
ERNC
|
||||
VELL
|
||||
OYHA
|
||||
PCRY
|
||||
|
||||
ECHO
|
||||
ORCA
|
||||
PULL
|
||||
SYNC
|
||||
VERY
|
||||
SELL
|
||||
--
|
||||
KRUS
|
||||
YOAD
|
||||
AKOK
|
||||
OIIR
|
||||
EGCY
|
||||
|
||||
ARID
|
||||
EGOS
|
||||
KICK
|
||||
OKAY
|
||||
YOUR
|
||||
ARCS
|
||||
--
|
||||
GICR
|
||||
UANC
|
||||
RUUY
|
||||
ZRRB
|
||||
PPON
|
||||
|
||||
GRUB
|
||||
PURR
|
||||
RACY
|
||||
UPON
|
||||
ZINC
|
||||
ZANY
|
||||
--
|
||||
AMNX
|
||||
JKOA
|
||||
OTZZ
|
||||
LARM
|
||||
EYIR
|
||||
|
||||
ATOM
|
||||
EMIR
|
||||
JAZZ
|
||||
LYNX
|
||||
OKRA
|
||||
LAIR
|
||||
--
|
||||
MRLG
|
||||
SAAS
|
||||
WUIP
|
||||
ABEM
|
||||
HMOY
|
||||
|
||||
ABLY
|
||||
HUES
|
||||
MAIM
|
||||
SMOG
|
||||
WRAP
|
||||
SUES
|
||||
--
|
||||
LNIC
|
||||
GPTH
|
||||
MING
|
||||
REVW
|
||||
EYAY
|
||||
|
||||
EPIC
|
||||
GNAW
|
||||
LEVY
|
||||
MYTH
|
||||
RING
|
||||
ENVY
|
||||
--
|
||||
RAOA
|
||||
OSNL
|
||||
UOAG
|
||||
AQES
|
||||
WKUY
|
||||
|
||||
AQUA
|
||||
OKAY
|
||||
RANG
|
||||
USES
|
||||
WOOL
|
||||
WOES
|
||||
--
|
||||
IENO
|
||||
YASC
|
||||
ZNDY
|
||||
UILL
|
||||
ETEM
|
||||
|
||||
EASY
|
||||
ITEM
|
||||
UNDO
|
||||
YELL
|
||||
ZINC
|
||||
ZANY
|
||||
--
|
||||
OIIA
|
||||
NURD
|
||||
EMER
|
||||
KKLL
|
||||
ICKE
|
||||
|
||||
EMIR
|
||||
ICED
|
||||
KILL
|
||||
NUKE
|
||||
OKRA
|
||||
NULL
|
||||
--
|
||||
DEOR
|
||||
OUIB
|
||||
ARLO
|
||||
LLNG
|
||||
CDSI
|
||||
|
||||
ALSO
|
||||
CRIB
|
||||
DELI
|
||||
LUNG
|
||||
ODOR
|
||||
CLOG
|
||||
--
|
||||
AREY
|
||||
LANG
|
||||
WOTP
|
||||
IEIH
|
||||
KNCL
|
||||
|
||||
ARTY
|
||||
INCH
|
||||
KEEP
|
||||
LONG
|
||||
WAIL
|
||||
ARCH
|
||||
--
|
||||
NAUA
|
||||
GHOK
|
||||
TEMN
|
||||
UUWB
|
||||
MPTG
|
||||
|
||||
GAWK
|
||||
META
|
||||
NUMB
|
||||
THUG
|
||||
UPON
|
||||
NEON
|
||||
--
|
||||
BUXN
|
||||
SDAZ
|
||||
TNZI
|
||||
EAEE
|
||||
OMGG
|
||||
|
||||
BUZZ
|
||||
EDGE
|
||||
OMEN
|
||||
SNAG
|
||||
TAXI
|
||||
SAGE
|
||||
--
|
||||
WIEH
|
||||
AMIS
|
||||
SJAR
|
||||
QUUG
|
||||
ODSZ
|
||||
|
||||
AJAR
|
||||
ODES
|
||||
QUIZ
|
||||
SMUG
|
||||
WISH
|
||||
SUES
|
||||
--
|
||||
SDIC
|
||||
ZOGR
|
||||
AUNF
|
||||
DROD
|
||||
EIRY
|
||||
|
||||
ARID
|
||||
DOOR
|
||||
EDGY
|
||||
SURF
|
||||
ZINC
|
||||
AIRY
|
||||
--
|
||||
GOUK
|
||||
QEIH
|
||||
WTYM
|
||||
JLAS
|
||||
IUCZ
|
||||
|
||||
GLUM
|
||||
ITCH
|
||||
JOYS
|
||||
QUIZ
|
||||
WEAK
|
||||
GUYS
|
||||
--
|
||||
UXRM
|
||||
OAAD
|
||||
CUEY
|
||||
RNDN
|
||||
IMBO
|
||||
|
||||
CARD
|
||||
IMAM
|
||||
OXEN
|
||||
RUBY
|
||||
UNDO
|
||||
OMEN
|
||||
--
|
||||
EAWA
|
||||
YNON
|
||||
AIEL
|
||||
RTSS
|
||||
VEDP
|
||||
|
||||
ATOP
|
||||
ENDS
|
||||
REEL
|
||||
VISA
|
||||
YAWN
|
||||
AIDS
|
||||
--
|
||||
--
|
||||
KLUH
|
||||
OOOF
|
||||
SPRI
|
||||
HATY
|
||||
FIWB
|
||||
|
||||
FLUB
|
||||
HOOF
|
||||
KIWI
|
||||
OATH
|
||||
SPRY
|
||||
SLOB
|
||||
--
|
||||
EKBY
|
||||
ARIT
|
||||
TUVN
|
||||
LEOO
|
||||
CCHS
|
||||
|
||||
AKIN
|
||||
CUBS
|
||||
ECHO
|
||||
LEVY
|
||||
TROT
|
||||
TRIO
|
||||
--
|
||||
MUPW
|
||||
LEOD
|
||||
SPUP
|
||||
AVMN
|
||||
TYLE
|
||||
|
||||
AVOW
|
||||
LUMP
|
||||
MELD
|
||||
SPUN
|
||||
TYPE
|
||||
MULE
|
||||
--
|
||||
LUIY
|
||||
WCHA
|
||||
TAWN
|
||||
EGLP
|
||||
UHNO
|
||||
|
||||
ECHO
|
||||
LAWN
|
||||
TUNA
|
||||
UGLY
|
||||
WHIP
|
||||
THIN
|
||||
--
|
||||
WQBA
|
||||
HOIE
|
||||
EADS
|
||||
TWUN
|
||||
ABOF
|
||||
|
||||
AQUA
|
||||
EBBS
|
||||
HOOF
|
||||
TWIN
|
||||
WADE
|
||||
TABS
|
||||
--
|
||||
OCCO
|
||||
MBPN
|
||||
APOS
|
||||
SSIE
|
||||
EUHK
|
||||
|
||||
ASPS
|
||||
ECHO
|
||||
MUCK
|
||||
OBOE
|
||||
SPIN
|
||||
SUCK
|
||||
--
|
||||
AUPY
|
||||
WGAE
|
||||
OKTO
|
||||
EYOP
|
||||
HHIS
|
||||
|
||||
AUTO
|
||||
EGOS
|
||||
HYPE
|
||||
OKAY
|
||||
WHIP
|
||||
HUTS
|
||||
--
|
||||
LNDO
|
||||
UAOT
|
||||
OERN
|
||||
IDWA
|
||||
SKSL
|
||||
|
||||
IDOL
|
||||
LAST
|
||||
OKRA
|
||||
SEWN
|
||||
UNDO
|
||||
LAWN
|
||||
--
|
||||
LOGN
|
||||
OUUP
|
||||
YNEH
|
||||
EMCR
|
||||
IDME
|
||||
|
||||
EDGE
|
||||
INCH
|
||||
LUMP
|
||||
OMEN
|
||||
YOUR
|
||||
ONCE
|
||||
--
|
||||
UGNY
|
||||
ENEE
|
||||
SVLH
|
||||
LOUN
|
||||
ILCM
|
||||
|
||||
EVEN
|
||||
INCH
|
||||
LONE
|
||||
SLUM
|
||||
UGLY
|
||||
SOLE
|
||||
--
|
||||
MUEA
|
||||
DEGN
|
||||
OOCH
|
||||
EDMI
|
||||
CPLY
|
||||
|
||||
COMA
|
||||
DELI
|
||||
EDGY
|
||||
MUCH
|
||||
OPEN
|
||||
COLA
|
||||
--
|
||||
BHCK
|
||||
HIPE
|
||||
EYIT
|
||||
WDUG
|
||||
CUMN
|
||||
|
||||
BUCK
|
||||
CHUG
|
||||
EDIT
|
||||
HYMN
|
||||
WIPE
|
||||
HYPE
|
||||
--
|
||||
EAEN
|
||||
VCHO
|
||||
BRZM
|
||||
STIY
|
||||
AUMZ
|
||||
|
||||
ARMY
|
||||
BUZZ
|
||||
ECHO
|
||||
STEM
|
||||
VAIN
|
||||
BRIM
|
||||
--
|
||||
[eof]
|
43
res/levels/J
Normal file
43
res/levels/J
Normal file
@ -0,0 +1,43 @@
|
||||
# 5x5, advanced
|
||||
AANNE
|
||||
SNMLG
|
||||
CTPEH
|
||||
UPZCP
|
||||
BUUIL
|
||||
|
||||
APPLE
|
||||
BUNCH
|
||||
CAMEL
|
||||
STUNG
|
||||
UNZIP
|
||||
SAUCE
|
||||
--
|
||||
AEOIW DLEOK WWNLI TCDBM SIIAD ALIBI DENIM SCOLD TWEAK WIDOW WIELD
|
||||
ADIKR KUKEE VNOWN LOAPY BACCT ADAPT BAKER KNOWN LUCKY VOICE ADOPT
|
||||
ACPVD VENPY ONATE PRMER KOCUS ARMED KNAVE OCCUR POPPY VENTS VENUE
|
||||
AEUIN ETJOD SCCNY WRRRG GNEKO ACRID ENJOY GECKO STERN WRUNG STUNG
|
||||
AFZEY PIMLR CUIIP OHFZA SDRMT ADMIT CHIMP OFFER PIZZA SURLY CURLY
|
||||
AHHRF WETCR CRNDO FSOMH UOAEA AROMA CONDO FETCH USHER WHARF COACH
|
||||
AHSMT EUIFB HDURE TRTKY DXOOL ADORE DRIFT EXTOL HUSKY THUMB DROOL
|
||||
AIMFE WODMY CROET LLTCH YUIPL ALOFT CRIME LUMPY WITCH YODEL COMET
|
||||
DBZZE ULTAS OOMYY NNEIM GIOOD DIZZY GLOOM NOMAD OBEYS UNTIE GLEAM
|
||||
DWNZH BAGCP CEFML AIZUY MLUIC AWFUL BENCH CLUMP DIZZY MAGIC MANIC
|
||||
FALUE AHAST OUCIB QCUMR TNTRC ANTIC FALSE OCCUR QUART THUMB TACIT
|
||||
GIDIN UHOEE RARKH SULFY CNICO CHOKE GULCH RADIO SIREN UNIFY SILKY
|
||||
GIGTY WSSID LROUC FOIEH EHDAL ESSAY FRIED GHOUL LOGIC WIDTH FROTH
|
||||
GUUZY LOYOL RDZFN IEMNE FAFLD FUZZY GAFFE IDYLL LEMON ROUND FOUND
|
||||
HUECG CRIBY SNBUM OHNAN BOROH BUNCH CREAM HOBBY ONION SHRUG HUNCH
|
||||
ISOAN MACOE TESIP UPENS SNZUW ISSUE MACAW SPOON TEENS UNZIP MASON
|
||||
LODEP TUULE OPGUL RHIMM HAVBY HOVEL LADLE OPIUM RUGBY THUMP ROGUE
|
||||
LHUHC OSLCK TUGST UYIIA SARAL LYRIC OUGHT SALSA THICK USUAL SHUCK
|
||||
OOIPD PHCAL RRBOE SEAGN VXOUW OXBOW PROUD REIGN SHAPE VOCAL PECAN
|
||||
SNJAR RAPOY MOITL UIVIK TMOCC MAJOR RIVAL SMOCK TOPIC UNITY SAVOR
|
||||
TTDIA SRBZY WIZGN PEOFE UAFAC PIZZA STOIC TAFFY URBAN WEDGE SEDAN
|
||||
PHTLL TCLHR OICCY KEIUN MNEOK KNELL MELON OCCUR PITHY THICK ONION
|
||||
HOINA SSEEN UMOTO RETGR MYHCK HYENA MOTTO REIGN SMOCK USHER METER
|
||||
MORUK WEAOE KIYIW GRDPM SATAF GRAPE KAYAK MOTIF SERUM WIDOW MADAM
|
||||
UNERP KDZGS YAOLD IMAIA OIRME IMAGE KARMA ODORS UNZIP YIELD IDOLS
|
||||
SABUS KOMSR GMTAY HYOBT MIEHK GAMUT HOBBY KIOSK MYTHS SMEAR MOTHS
|
||||
BNLEF SUNKI OFUAK ETTFN KAYUY BULKY ENNUI KAYAK OFTEN STUFF EATEN
|
||||
PCCLY CEUOO KASKR ONBWN TOOUD COULD KNOWN OCCUR PESKY TABOO TACKY
|
||||
[eof]
|
12
res/levels/samples/01
Normal file
12
res/levels/samples/01
Normal file
@ -0,0 +1,12 @@
|
||||
BRSED
|
||||
GMAGE
|
||||
IAISF
|
||||
P P
|
||||
M
|
||||
|
||||
BASED
|
||||
GRASP
|
||||
GRIEF
|
||||
IMAGE
|
||||
PRISM
|
||||
BRIEF
|
37
res/levels/samples/02
Normal file
37
res/levels/samples/02
Normal file
@ -0,0 +1,37 @@
|
||||
ZIRST
|
||||
GOARS
|
||||
TRUNA
|
||||
H NED
|
||||
L E
|
||||
|
||||
GRUNT
|
||||
HORSE
|
||||
LINES
|
||||
TIARA
|
||||
ZONED
|
||||
GIANT
|
||||
GORED
|
||||
GORES
|
||||
GOURD
|
||||
GRAND
|
||||
GRANT
|
||||
GRASS
|
||||
HIRED
|
||||
HIRES
|
||||
HOARD
|
||||
HORNS
|
||||
HOUND
|
||||
HOURS
|
||||
HOUSE
|
||||
LIARS
|
||||
LINED
|
||||
LOANS
|
||||
LOUSE
|
||||
TIRED
|
||||
TIRES
|
||||
TOAST
|
||||
TONED
|
||||
TONES
|
||||
TOURS
|
||||
TRUST
|
||||
ZONES
|
1138
res/levels/unsorted
Normal file
1138
res/levels/unsorted
Normal file
File diff suppressed because it is too large
Load Diff
BIN
res/work.po
Normal file
BIN
res/work.po
Normal file
Binary file not shown.
56
src/constants.a
Normal file
56
src/constants.a
Normal file
@ -0,0 +1,56 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
|
||||
; soft switches
|
||||
KBD = $C000 ; last key pressed (if any)
|
||||
STOREOFF = $C000 ; STA then use the following 4 flags:
|
||||
READMAINMEM = $C002 ; STA to read from main mem
|
||||
READAUXMEM = $C003 ; STA to read from aux mem
|
||||
WRITEMAINMEM = $C004 ; STA to write to main mem
|
||||
WRITEAUXMEM = $C005 ; STA to write to aux mem
|
||||
CLRC3ROM = $C00A ; STA to use internal Slot 3 ROM (required to use 128K and DHGR)
|
||||
SETC3ROM = $C00B ; STA to use external Slot 3 ROM (required to detect VidHD in slot 3)
|
||||
CLR80VID = $C00C ; 40 columns (also used to get out of DHGR mode)
|
||||
SET80VID = $C00D ; 80 columns (also used to get into DHGR mode)
|
||||
PRIMARYCHARSET= $C00E ; no mousetext for you
|
||||
CLEARKBD = $C010 ; clear last key pressed
|
||||
SPEAKER = $C030 ; chirp chirp
|
||||
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color (also VidHD)
|
||||
GFXMODE = $C050
|
||||
TEXTMODE = $C051
|
||||
FULLGFX = $C052
|
||||
MIXGFX = $C053
|
||||
PAGE1 = $C054 ; page 1 (affects text, HGR, DHGR)
|
||||
PAGE2 = $C055 ; page 2 (affects text, HGR, DHGR)
|
||||
LORES = $C056
|
||||
HIRES = $C057
|
||||
|
||||
; ROM routines and addresses
|
||||
ROM_TEXT = $FB2F
|
||||
ROM_MACHINEID =$FBB3
|
||||
ROM_HOME = $FC58
|
||||
ROM_WAIT = $FCA8
|
||||
ROM_COUT = $FDED
|
||||
ROM_NORMAL = $FE84 ; NORMAL text (instead of INVERSE or FLASH)
|
||||
ROM_IN0 = $FE89 ; SETKBD
|
||||
ROM_PR0 = $FE93 ; SETVID
|
||||
|
||||
; zero page
|
||||
PARAM = $00 ; word (used by PARAMS_ON_STACK macro, so basically everywhere)
|
||||
PTR = $02 ; word
|
||||
SRC = $04 ; word
|
||||
DEST = $06 ; word
|
||||
SAVE = $08 ; word
|
||||
HTAB = $24 ; byte
|
||||
VTAB = $25 ; byte
|
||||
RNDSEED = $4E ; word
|
||||
|
||||
; application constants
|
||||
original_char = $ED ; byte
|
||||
char = $EE ; byte
|
||||
charrow = $EF ; byte
|
||||
GENSCROLLDOWN = $0800 ; 0x0900 bytes
|
||||
GENSCROLLUP = $1100 ; 0x0900 bytes
|
||||
HGRLO = $1A00 ; 0xC0 bytes
|
||||
HGRHI = $1B00 ; 0xC0 bytes
|
256
src/ds.puzzle.a
Normal file
256
src/ds.puzzle.a
Normal file
@ -0,0 +1,256 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
; data storage routines for puzzles
|
||||
;
|
||||
|
||||
puzzle_logical_width ; number of letters per word (4..7)
|
||||
!byte 0
|
||||
puzzle_logical_height ; number of rows with letters (1..5)
|
||||
!byte 0
|
||||
puzzle_offsets ; how far each column has been scrolled down from top of grid
|
||||
!fill 8, 0
|
||||
puzzle_data ; character data
|
||||
!fill 8, 0
|
||||
puzzle_data1
|
||||
!fill 8, 0
|
||||
puzzle_data2
|
||||
!fill 8, 0
|
||||
puzzle_data3
|
||||
!fill 8, 0
|
||||
puzzle_data4
|
||||
!fill 8, 0
|
||||
puzzle_data5
|
||||
!fill 8, 0
|
||||
puzzle_data6
|
||||
!fill 8, 0
|
||||
puzzle_data7
|
||||
!fill 8, 0
|
||||
puzzle_data8
|
||||
!fill 8, 0
|
||||
puzzle_word_count ; number of records in <puzzle_words>
|
||||
!byte 0
|
||||
puzzle_words ; 32 x 8-byte records
|
||||
!fill 256, 0 ; each record is a <puzzle_logical_width>-length word, no prefix
|
||||
|
||||
InitPuzzle
|
||||
; in: A = logical puzzle width (number of letters in each word, 4..7)
|
||||
sta puzzle_logical_width
|
||||
lda #0
|
||||
sta puzzle_logical_height
|
||||
sta puzzle_word_count
|
||||
ldx #8
|
||||
- sta puzzle_offsets-1, x
|
||||
dex
|
||||
bne -
|
||||
- sta puzzle_words, x
|
||||
inx
|
||||
bne -
|
||||
rts
|
||||
|
||||
AddLineToPuzzle
|
||||
; in: A/Y points to <puzzle_logical_width> length character buffer (no prefix, no suffix)
|
||||
; out: clobbers all registers
|
||||
; clobbers $FE/$FF
|
||||
+ST16 $FE
|
||||
lda puzzle_logical_height
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
ldy #0
|
||||
- lda ($FE), y
|
||||
sta puzzle_data, x
|
||||
inx
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
inc puzzle_logical_height
|
||||
rts
|
||||
|
||||
AddTargetWordToPuzzle
|
||||
; in: A/Y points to <puzzle_logical_width> length character buffer (no prefix, no suffix)
|
||||
+ST16 $FE
|
||||
lda puzzle_word_count
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
ldy #0
|
||||
- lda ($FE), y
|
||||
sta puzzle_words, x
|
||||
inx
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
inc puzzle_word_count
|
||||
rts
|
||||
|
||||
CheckForTargetWord
|
||||
; in: none
|
||||
; out: C clear if a target word was found on row 4
|
||||
; C set if no target word found
|
||||
+LDADDR puzzle_words
|
||||
+ST16 $FE
|
||||
ldx #0 ; word index
|
||||
@checkword
|
||||
ldy #0 ; character index
|
||||
- lda puzzle_data4, y
|
||||
and #$7F ; letters within puzzle have high bit set if they've been used before
|
||||
cmp ($FE), y ; (which is fine, and on later puzzles is guaranteed to happen eventually)
|
||||
bne @nextword
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
; found matching word
|
||||
; set high bit on all letters in row 4
|
||||
ldy #0
|
||||
- lda puzzle_data4, y
|
||||
ora #$80
|
||||
sta puzzle_data4, y
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
clc
|
||||
rts
|
||||
@nextword
|
||||
lda $FE
|
||||
clc
|
||||
adc #8
|
||||
sta $FE
|
||||
bcc +
|
||||
inc $FF
|
||||
+ inx
|
||||
cpx puzzle_word_count
|
||||
bne @checkword
|
||||
sec
|
||||
rts
|
||||
|
||||
ScrollPuzzleDown
|
||||
; in: Y = logical column to scroll
|
||||
; out: C clear if puzzle was scrolled down
|
||||
; C set if puzzle was already as far down as it can go
|
||||
; preserves X/Y
|
||||
lda puzzle_offsets, y
|
||||
cmp #4
|
||||
beq @fail
|
||||
|
||||
lda puzzle_data7, y
|
||||
sta puzzle_data8, y
|
||||
|
||||
lda puzzle_data6, y
|
||||
sta puzzle_data7, y
|
||||
|
||||
lda puzzle_data5, y
|
||||
sta puzzle_data6, y
|
||||
|
||||
lda puzzle_data4, y
|
||||
sta puzzle_data5, y
|
||||
|
||||
lda puzzle_data3, y
|
||||
sta puzzle_data4, y
|
||||
|
||||
lda puzzle_data2, y
|
||||
sta puzzle_data3, y
|
||||
|
||||
lda puzzle_data1, y
|
||||
sta puzzle_data2, y
|
||||
|
||||
lda puzzle_data, y
|
||||
sta puzzle_data1, y
|
||||
|
||||
lda #0
|
||||
sta puzzle_data, y
|
||||
|
||||
lda puzzle_offsets, y
|
||||
clc
|
||||
adc #1
|
||||
sta puzzle_offsets, y
|
||||
clc
|
||||
rts
|
||||
@fail sec
|
||||
rts
|
||||
|
||||
ScrollPuzzleUp
|
||||
; in: Y = logical column to scroll
|
||||
; out: C clear if puzzle was scrolled up
|
||||
; C set if puzzle was already as far up as it can go
|
||||
; preserves X/Y
|
||||
lda puzzle_offsets, y
|
||||
clc
|
||||
adc puzzle_logical_height
|
||||
cmp #5
|
||||
beq @fail
|
||||
|
||||
lda puzzle_data1, y
|
||||
sta puzzle_data, y
|
||||
|
||||
lda puzzle_data2, y
|
||||
sta puzzle_data1, y
|
||||
|
||||
lda puzzle_data3, y
|
||||
sta puzzle_data2, y
|
||||
|
||||
lda puzzle_data4, y
|
||||
sta puzzle_data3, y
|
||||
|
||||
lda puzzle_data5, y
|
||||
sta puzzle_data4, y
|
||||
|
||||
lda puzzle_data6, y
|
||||
sta puzzle_data5, y
|
||||
|
||||
lda puzzle_data7, y
|
||||
sta puzzle_data6, y
|
||||
|
||||
lda puzzle_data8, y
|
||||
sta puzzle_data7, y
|
||||
|
||||
lda #0
|
||||
sta puzzle_data8, y
|
||||
|
||||
lda puzzle_offsets, y
|
||||
sec
|
||||
sbc #1
|
||||
sta puzzle_offsets, y
|
||||
clc
|
||||
rts
|
||||
@fail sec
|
||||
rts
|
||||
|
||||
RedrawPuzzle
|
||||
jsr Home
|
||||
jsr DrawThinLines
|
||||
+LDADDR puzzle_data
|
||||
+ST16 $FE
|
||||
ldx #0 ; logical row
|
||||
-- ldy #0 ; logical column
|
||||
- lda ($FE), y
|
||||
jsr DrawCharacter
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
lda $FE
|
||||
clc
|
||||
adc #8
|
||||
sta $FE
|
||||
bcc +
|
||||
inc $FF
|
||||
+ inx
|
||||
cpx puzzle_logical_height
|
||||
bne --
|
||||
|
||||
bit GFXMODE
|
||||
rts
|
||||
|
||||
AnimatePuzzleIntoPlace
|
||||
ldy #0
|
||||
-- ldx #4
|
||||
- jsr ScrollPuzzleDown
|
||||
jsr ScrollDown
|
||||
dex
|
||||
bne -
|
||||
iny
|
||||
cpy #7
|
||||
bne --
|
||||
rts
|
41
src/hw.vbl.a
Normal file
41
src/hw.vbl.a
Normal file
@ -0,0 +1,41 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by qkumba
|
||||
;
|
||||
; Functions to enable and disable VBL polling on various Apple II models
|
||||
|
||||
WaitForVBL
|
||||
jmp WaitForVBL_iie ; SMC to RTS on a II+
|
||||
|
||||
UnwaitForVBL
|
||||
rts ; SMC to JMP on a IIc
|
||||
!word iUnwaitForVBL
|
||||
|
||||
iWaitForVBL
|
||||
sei ; IIc is special
|
||||
sta $C07F ; enable access to VBL register
|
||||
sta $C05B ; enable VBL polling
|
||||
sta $C07E ; disable access to VBL register
|
||||
WaitForVBL_iie ; IIe/IIgs have a relatively sane VBL
|
||||
; but it's reversed between the two
|
||||
; so we default to IIe, and patch in
|
||||
; the reverse case if it's a IIGS.
|
||||
- bit $C019
|
||||
patch_VBL_iigs1
|
||||
bpl -
|
||||
patch_VBL_iic1
|
||||
- lda $C019 ; $c019 bit 7 is sticky, reset it (SMC->#$70 for IIc)
|
||||
patch_VBL_iic2
|
||||
patch_VBL_iigs2
|
||||
bmi -
|
||||
WaitForVBL_nop ; II/II+ have no easy VBL
|
||||
rts
|
||||
|
||||
iUnwaitForVBL
|
||||
- bit $C019
|
||||
bpl -
|
||||
lda $C070 ; $c019 bit 7 is sticky, reset it
|
||||
sta $C07F ; enable access to VBL register
|
||||
sta $C05A ; disable VBL polling
|
||||
sta $C07E ; disable access to VBL register
|
||||
cli
|
||||
rts
|
45
src/hw.vbl.init.a
Normal file
45
src/hw.vbl.init.a
Normal file
@ -0,0 +1,45 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by qkumba
|
||||
;
|
||||
; Identify platform and construct appropriate VBL routine
|
||||
|
||||
romid = $FBB3
|
||||
; $38=][, $EA=][+, $06=//e compatible
|
||||
ROMID_IIECOMPAT = 6
|
||||
romid_ec = $FBC0
|
||||
; $EA=//e original, $E0=//e enhanced, $E1=//e EDM, $00=//c
|
||||
|
||||
; IIGS
|
||||
idroutine = $FE1F ; SEC, JSR $FE1F, BCS notgs
|
||||
|
||||
InitVBL
|
||||
ldx romid
|
||||
cpx #ROMID_IIECOMPAT
|
||||
bne @build_none ; not a //e
|
||||
lda romid_ec
|
||||
beq @build_iic ; //c family
|
||||
sec
|
||||
jsr idroutine ; check for IIgs
|
||||
bcs @NotGS
|
||||
lda #$30
|
||||
sta patch_VBL_iigs1
|
||||
lda #$10
|
||||
sta patch_VBL_iigs2
|
||||
@NotGS
|
||||
rts
|
||||
@build_iic
|
||||
lda #$70
|
||||
sta patch_VBL_iic1+1
|
||||
lda #$60
|
||||
sta patch_VBL_iic2
|
||||
lda #<iWaitForVBL
|
||||
sta WaitForVBL+1
|
||||
lda #>iWaitForVBL
|
||||
sta WaitForVBL+2
|
||||
lda #$4C
|
||||
sta UnwaitForVBL
|
||||
rts
|
||||
@build_none
|
||||
lda #$60
|
||||
sta WaitForVBL
|
||||
rts
|
176
src/macros.a
Normal file
176
src/macros.a
Normal file
@ -0,0 +1,176 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
; common assembler macros (6502 compatible)
|
||||
;
|
||||
|
||||
; .hgrlo, .hgr1hi will each be filled with $C0 bytes
|
||||
; based on routine by John Brooks
|
||||
; posted on comp.sys.apple2 on 2018-07-11
|
||||
; https://groups.google.com/d/msg/comp.sys.apple2/v2HOfHOmeNQ/zD76fJg_BAAJ
|
||||
!macro BUILD_HGR_LOOKUP_TABLES .hgrlo, .hgr1hi {
|
||||
ldx #0
|
||||
- txa
|
||||
and #$F8
|
||||
bpl +
|
||||
ora #5
|
||||
+ asl
|
||||
bpl +
|
||||
ora #5
|
||||
+ asl
|
||||
asl
|
||||
sta .hgrlo,x
|
||||
txa
|
||||
and #7
|
||||
rol
|
||||
asl .hgrlo,x
|
||||
rol
|
||||
ora #$20
|
||||
sta .hgr1hi,x
|
||||
inx
|
||||
cpx #$C0
|
||||
bne -
|
||||
}
|
||||
|
||||
; for functions that take parameters on the stack
|
||||
; set (PARAM) to point to the parameters and
|
||||
; move the stack pointer to the first byte after the parameters
|
||||
; clobbers A,X,Y
|
||||
!macro PARAMS_ON_STACK .bytes {
|
||||
pla
|
||||
sta PARAM
|
||||
clc
|
||||
adc #.bytes
|
||||
tay
|
||||
pla
|
||||
sta PARAM+1
|
||||
adc #0
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
}
|
||||
|
||||
; for functions that take parameters on the stack
|
||||
; load a 16-bit value from the parameters on the stack into A (low) and Y (high)
|
||||
; (assumes PARAMS_ON_STACK was used first)
|
||||
!macro LDPARAM .offset {
|
||||
ldy #.offset
|
||||
lda (PARAM),y
|
||||
pha
|
||||
iny
|
||||
lda (PARAM),y
|
||||
tay
|
||||
pla
|
||||
}
|
||||
|
||||
; for functions that take parameters on the stack
|
||||
; load a 16-bit value from the parameters on the stack into A (low) and Y (high)
|
||||
; then store it as new source
|
||||
; (assumes PARAMS_ON_STACK was used first)
|
||||
!macro LDPARAMPTR .offset,.dest {
|
||||
ldy #.offset
|
||||
lda (PARAM),y
|
||||
sta .dest
|
||||
iny
|
||||
lda (PARAM),y
|
||||
sta .dest+1
|
||||
}
|
||||
|
||||
; load the address of .ptr into A (low) and Y (high)
|
||||
!macro LDADDR .ptr {
|
||||
lda #<.ptr
|
||||
ldy #>.ptr
|
||||
}
|
||||
|
||||
; load a 16-bit value into A (low) and Y (high)
|
||||
!macro LD16 .ptr {
|
||||
lda .ptr
|
||||
ldy .ptr+1
|
||||
}
|
||||
|
||||
; store a 16-bit value from A (low) and Y (high)
|
||||
!macro ST16 .ptr {
|
||||
sta .ptr
|
||||
sty .ptr+1
|
||||
}
|
||||
|
||||
; decrement a 16-bit value in A (low) and Y (high)
|
||||
!macro DEC16 {
|
||||
sec
|
||||
sbc #1
|
||||
bcs +
|
||||
dey
|
||||
+
|
||||
}
|
||||
|
||||
; increment a 16-bit value in A (low) and Y (high)
|
||||
!macro INC16 {
|
||||
clc
|
||||
adc #1
|
||||
bne +
|
||||
iny
|
||||
+
|
||||
}
|
||||
|
||||
; compare a 16-bit value in A (low) and Y (high) to an absolute address
|
||||
!macro CMP16ADDR .addr {
|
||||
cmp .addr
|
||||
bne +
|
||||
cpy .addr+1
|
||||
+
|
||||
}
|
||||
|
||||
; compare a 16-bit value in A (low) and Y (high) to an immediate value
|
||||
!macro CMP16 .val {
|
||||
cmp #<.val
|
||||
bne +
|
||||
cpy #>.val
|
||||
+
|
||||
}
|
||||
|
||||
!macro LBPL .target {
|
||||
bmi +
|
||||
jmp .target
|
||||
+
|
||||
}
|
||||
|
||||
!macro LBNE .target {
|
||||
beq +
|
||||
jmp .target
|
||||
+
|
||||
}
|
||||
|
||||
!macro LBCS .target {
|
||||
bcc +
|
||||
jmp .target
|
||||
+
|
||||
}
|
||||
|
||||
!macro READ_ROM_NO_WRITE {
|
||||
bit $C082
|
||||
}
|
||||
|
||||
; use BIT to swallow the following 1-byte opcode
|
||||
!macro HIDE_NEXT_BYTE {
|
||||
!byte $24
|
||||
}
|
||||
|
||||
; use BIT to swallow the following 2-byte opcode
|
||||
!macro HIDE_NEXT_2_BYTES {
|
||||
!byte $2C
|
||||
}
|
||||
|
||||
!macro RTS_IF_KEY {
|
||||
bit $c000
|
||||
bpl +
|
||||
rts
|
||||
+
|
||||
}
|
||||
|
||||
; debugging
|
||||
!macro DEBUGWAIT {
|
||||
bit $c010
|
||||
- bit $c000
|
||||
bpl -
|
||||
bit $c010
|
||||
}
|
134
src/million.a
Normal file
134
src/million.a
Normal file
@ -0,0 +1,134 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/MILLION.SYSTEM",plain
|
||||
*=$2000
|
||||
|
||||
column = $FC
|
||||
row = $FD
|
||||
|
||||
!source "src/constants.a" ; no code
|
||||
!source "src/macros.a" ; no code
|
||||
!source "src/million.init.a" ; one-time initialization code
|
||||
!source "src/hw.vbl.init.a"
|
||||
|
||||
FirstMover
|
||||
!pseudopc $4000 {
|
||||
Start
|
||||
jsr TitlePage
|
||||
lda #7
|
||||
jsr InitPuzzle
|
||||
|
||||
+LDADDR puzzleline1
|
||||
jsr AddLineToPuzzle
|
||||
+LDADDR puzzleline2
|
||||
jsr AddLineToPuzzle
|
||||
+LDADDR puzzleline3
|
||||
jsr AddLineToPuzzle
|
||||
|
||||
+LDADDR targetword1
|
||||
jsr AddTargetWordToPuzzle
|
||||
+LDADDR targetword2
|
||||
jsr AddTargetWordToPuzzle
|
||||
+LDADDR targetword3
|
||||
jsr AddTargetWordToPuzzle
|
||||
|
||||
lda #0
|
||||
sta selected_logical_column
|
||||
jsr RedrawPuzzle
|
||||
jsr AnimatePuzzleIntoPlace
|
||||
jsr DrawColumnSelectionIndicator
|
||||
bit $c010
|
||||
jmp PlayEventLoop
|
||||
|
||||
selected_logical_column
|
||||
!byte 0
|
||||
|
||||
PlayEventLoop
|
||||
- lda $c000
|
||||
bpl -
|
||||
bit $c010
|
||||
cmp #$8B ; up arrow
|
||||
beq EventUpArrow
|
||||
cmp #$8A ; down arrow
|
||||
beq EventDownArrow
|
||||
cmp #$88 ; left arrow
|
||||
beq EventLeftArrow
|
||||
cmp #$95 ; right arrow
|
||||
beq EventRightArrow
|
||||
jmp PlayEventLoop
|
||||
|
||||
EventUpArrow
|
||||
ldy selected_logical_column
|
||||
jsr ScrollPuzzleUp
|
||||
bcs @fail
|
||||
jsr ScrollUp
|
||||
jsr CheckForTargetWord
|
||||
bcc FoundTargetWord
|
||||
bcs @done
|
||||
@fail jsr SoftBell
|
||||
@done jmp PlayEventLoop
|
||||
|
||||
EventDownArrow
|
||||
ldy selected_logical_column
|
||||
jsr ScrollPuzzleDown
|
||||
bcs @fail
|
||||
jsr ScrollDown
|
||||
jsr CheckForTargetWord
|
||||
bcc FoundTargetWord
|
||||
bcs @done
|
||||
@fail jsr SoftBell
|
||||
@done jmp PlayEventLoop
|
||||
|
||||
FoundTargetWord
|
||||
ldx #4
|
||||
ldy #0
|
||||
- lda puzzle_data4, y
|
||||
jsr DrawCharacter
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bne -
|
||||
jmp PlayEventLoop
|
||||
|
||||
EventLeftArrow
|
||||
ldy selected_logical_column
|
||||
jsr EraseColumnSelectionIndicator
|
||||
bne +
|
||||
ldy puzzle_logical_width
|
||||
+ dey
|
||||
sty selected_logical_column
|
||||
jsr DrawColumnSelectionIndicator
|
||||
jmp PlayEventLoop
|
||||
|
||||
EventRightArrow
|
||||
ldy selected_logical_column
|
||||
jsr EraseColumnSelectionIndicator
|
||||
iny
|
||||
cpy puzzle_logical_width
|
||||
bcc +
|
||||
ldy #0
|
||||
+ sty selected_logical_column
|
||||
jsr DrawColumnSelectionIndicator
|
||||
jmp PlayEventLoop
|
||||
|
||||
puzzleline1
|
||||
!raw "PRTFELE"
|
||||
puzzleline2
|
||||
!raw "MHERINS"
|
||||
puzzleline3
|
||||
!raw "SIOTBET"
|
||||
targetword1
|
||||
!raw "MITTENS"
|
||||
targetword2
|
||||
!raw "PROFILE"
|
||||
targetword3
|
||||
!raw "SHERBET"
|
||||
|
||||
!source "src/ds.puzzle.a"
|
||||
!source "src/hw.vbl.a"
|
||||
!source "src/ui.title.a"
|
||||
!source "src/ui.common.a"
|
||||
!source "src/ui.font.a"
|
||||
!source "src/ui.font.data.a"
|
||||
}
|
275
src/million.init.a
Normal file
275
src/million.init.a
Normal file
@ -0,0 +1,275 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
; initialize program, generate lookup tables and dynamically generated code
|
||||
;
|
||||
|
||||
+READ_ROM_NO_WRITE
|
||||
sta PRIMARYCHARSET
|
||||
sta CLR80VID
|
||||
sta STOREOFF
|
||||
sta READMAINMEM
|
||||
sta WRITEMAINMEM
|
||||
jsr ROM_TEXT
|
||||
jsr ROM_HOME
|
||||
jsr ROM_NORMAL
|
||||
jsr ROM_IN0
|
||||
jsr ROM_PR0
|
||||
+BUILD_HGR_LOOKUP_TABLES HGRLO, HGRHI
|
||||
jsr InitScrollUp
|
||||
jsr InitScrollDown
|
||||
|
||||
ldx #$20
|
||||
ldy #0
|
||||
@a lda FirstMover,y
|
||||
@b sta $4000,y
|
||||
iny
|
||||
bne @a
|
||||
inc @a+2
|
||||
inc @b+2
|
||||
dex
|
||||
bne @a
|
||||
jmp Start
|
||||
|
||||
InitScrollUp
|
||||
lda #<GENSCROLLUP
|
||||
sta $FE
|
||||
lda #>GENSCROLLUP
|
||||
sta $FF
|
||||
ldy #$00
|
||||
ldx #$00
|
||||
@loadleft
|
||||
inx
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FE
|
||||
jsr StoreAndInc
|
||||
jmp @storeleft
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FC
|
||||
jsr StoreAndInc
|
||||
jmp @storeleft
|
||||
+ lda #$B9 ; LDA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@storeleft
|
||||
dex
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FE
|
||||
jsr StoreAndInc
|
||||
jmp @loadright
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FC
|
||||
jsr StoreAndInc
|
||||
jmp @loadright
|
||||
+ lda #$99 ; STA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@loadright
|
||||
inx
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FF
|
||||
jsr StoreAndInc
|
||||
jmp @storeright
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FD
|
||||
jsr StoreAndInc
|
||||
jmp @storeright
|
||||
+ lda #$B9 ; LDA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
clc
|
||||
adc #1
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@storeright
|
||||
dex
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FF
|
||||
jsr StoreAndInc
|
||||
jmp @next
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FD
|
||||
jsr StoreAndInc
|
||||
jmp @next
|
||||
+ lda #$99 ; STA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
clc
|
||||
adc #1
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@next
|
||||
inx
|
||||
cpx #$BF
|
||||
+LBNE @loadleft
|
||||
|
||||
lda #$CA ; DEX
|
||||
jsr StoreAndInc
|
||||
lda #$F0 ; BEQ
|
||||
jsr StoreAndInc
|
||||
lda #$03
|
||||
jsr StoreAndInc
|
||||
lda #$4C ; JMP
|
||||
jsr StoreAndInc
|
||||
lda #<GENSCROLLUP
|
||||
jsr StoreAndInc
|
||||
lda #>GENSCROLLUP
|
||||
jsr StoreAndInc
|
||||
lda #$60 ; RTS
|
||||
; /!\ execution falls through here
|
||||
StoreAndInc
|
||||
sta ($FE), y
|
||||
iny
|
||||
bne +
|
||||
inc $FF
|
||||
+ rts
|
||||
|
||||
InitScrollDown
|
||||
lda #<GENSCROLLDOWN
|
||||
sta $FE
|
||||
lda #>GENSCROLLDOWN
|
||||
sta $FF
|
||||
ldy #$00
|
||||
ldx #$BF
|
||||
@loadleft
|
||||
dex
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FE
|
||||
jsr StoreAndInc
|
||||
jmp @storeleft
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FC
|
||||
jsr StoreAndInc
|
||||
jmp @storeleft
|
||||
+ lda #$B9 ; LDA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@storeleft
|
||||
inx
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FE
|
||||
jsr StoreAndInc
|
||||
jmp @loadright
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FC
|
||||
jsr StoreAndInc
|
||||
jmp @loadright
|
||||
+ lda #$99 ; STA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@loadright
|
||||
dex
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FF
|
||||
jsr StoreAndInc
|
||||
jmp @storeright
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$A5 ; LDA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FD
|
||||
jsr StoreAndInc
|
||||
jmp @storeright
|
||||
+ lda #$B9 ; LDA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
clc
|
||||
adc #1
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@storeright
|
||||
inx
|
||||
cpx #$55
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FF
|
||||
jsr StoreAndInc
|
||||
jmp @next
|
||||
+ cpx #$6B
|
||||
bne +
|
||||
lda #$85 ; STA/zp
|
||||
jsr StoreAndInc
|
||||
lda #$FD
|
||||
jsr StoreAndInc
|
||||
jmp @next
|
||||
+ lda #$99 ; STA addr,Y
|
||||
jsr StoreAndInc
|
||||
lda HGRLO, x
|
||||
clc
|
||||
adc #1
|
||||
jsr StoreAndInc
|
||||
lda HGRHI, x
|
||||
jsr StoreAndInc
|
||||
@next
|
||||
dex
|
||||
+LBNE @loadleft
|
||||
|
||||
lda #$CA ; DEX
|
||||
jsr StoreAndInc
|
||||
lda #$F0 ; BEQ
|
||||
jsr StoreAndInc
|
||||
lda #$03
|
||||
jsr StoreAndInc
|
||||
lda #$4C ; JMP
|
||||
jsr StoreAndInc
|
||||
lda #<GENSCROLLDOWN
|
||||
jsr StoreAndInc
|
||||
lda #>GENSCROLLDOWN
|
||||
jsr StoreAndInc
|
||||
lda #$60 ; RTS
|
||||
jmp StoreAndInc
|
165
src/ui.common.a
Normal file
165
src/ui.common.a
Normal file
@ -0,0 +1,165 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
; common graphics functions
|
||||
;
|
||||
|
||||
GlobalLeftMargin
|
||||
; TODO other values for smaller puzzles
|
||||
; $0A for 7-letter puzzles
|
||||
!byte $0A
|
||||
|
||||
Home
|
||||
; in: none, but assumes text screen 1 is clear (this is done at program startup)
|
||||
; out: hi-res page 1 cleared but text screen 1 still displayed
|
||||
bit PAGE1
|
||||
bit FULLGFX
|
||||
bit HIRES
|
||||
bit TEXTMODE
|
||||
ldx #$20
|
||||
stx @erase+2
|
||||
ldy #$00
|
||||
tya
|
||||
@erase sta $2000,y
|
||||
iny
|
||||
bne @erase
|
||||
inc @erase+2
|
||||
dex
|
||||
bne @erase
|
||||
rts
|
||||
|
||||
DrawThinLines
|
||||
ldx #$55
|
||||
jsr DrawThinLine
|
||||
ldx #$6B
|
||||
; /!\ execution falls through here
|
||||
DrawThinLine
|
||||
; in: X = HGR row (0x00..0xBF)
|
||||
lda #$AA
|
||||
ldy HGRLO, x
|
||||
sty $FE
|
||||
ldy HGRHI, x
|
||||
sty $FF
|
||||
ldy GlobalLeftMargin
|
||||
dey
|
||||
- sta ($FE), y
|
||||
eor #$7F
|
||||
iny
|
||||
cpy #$1F ; TODO
|
||||
bcc -
|
||||
rts
|
||||
|
||||
ScrollDown
|
||||
; in: Y = logical column to scroll
|
||||
; out: X/Y preserved
|
||||
stx @x+1
|
||||
sty @y+1
|
||||
ldx #$16
|
||||
jsr LogicalColumnToPhysicalColumn
|
||||
jsr InitScrollStorage
|
||||
jsr WaitForVBL
|
||||
jsr GENSCROLLDOWN
|
||||
jsr UnwaitForVBL
|
||||
@x ldx #$FD ; SMC
|
||||
@y ldy #$FD ; SMC
|
||||
rts
|
||||
|
||||
ScrollUp
|
||||
; in: Y = logical column to scroll
|
||||
; out: X/Y preserved
|
||||
stx @x+1
|
||||
sty @y+1
|
||||
ldx #$16
|
||||
jsr LogicalColumnToPhysicalColumn
|
||||
jsr InitScrollStorage
|
||||
jsr WaitForVBL
|
||||
jsr GENSCROLLUP
|
||||
jsr UnwaitForVBL
|
||||
@x ldx #$FD ; SMC
|
||||
@y ldy #$FD ; SMC
|
||||
rts
|
||||
|
||||
InitScrollStorage
|
||||
lda #$00
|
||||
sta $FC
|
||||
sta $FD
|
||||
sta $FE
|
||||
sta $FF
|
||||
rts
|
||||
|
||||
LogicalColumnToPhysicalColumn
|
||||
; in: Y contains logical column number
|
||||
; out: Y contains physical byte offset to use against an HGR base address
|
||||
; A clobbered
|
||||
; X preserved
|
||||
lda GlobalLeftMargin
|
||||
clc
|
||||
bcc +
|
||||
- adc #$03
|
||||
+ dey
|
||||
bpl -
|
||||
tay
|
||||
rts
|
||||
|
||||
EraseColumnSelectionIndicator
|
||||
; out: preserves X/Y
|
||||
stx @x+1
|
||||
sty @y+1
|
||||
jsr DrawThinLines
|
||||
@x ldx #$FD ; SMC
|
||||
@y ldy #$FD ; SMC
|
||||
rts
|
||||
|
||||
DrawColumnSelectionIndicator
|
||||
; out: preserves X/Y
|
||||
stx @x+1
|
||||
sty @y+1
|
||||
ldx #$55
|
||||
jsr DrawOneSelectionIndicator
|
||||
ldx #$6B
|
||||
jsr DrawOneSelectionIndicator
|
||||
@x ldx #$FD ; SMC
|
||||
@y ldy #$FD ; SMC
|
||||
rts
|
||||
|
||||
DrawOneSelectionIndicator
|
||||
lda HGRLO, x
|
||||
sta $FE
|
||||
lda HGRHI, x
|
||||
sta $FF
|
||||
ldy GlobalLeftMargin
|
||||
dey
|
||||
lda #$D5
|
||||
ldx selected_logical_column
|
||||
beq +
|
||||
- iny
|
||||
iny
|
||||
iny
|
||||
eor #$7F
|
||||
dex
|
||||
bne -
|
||||
+ ldx #4
|
||||
- sta ($FE), y
|
||||
eor #$7F
|
||||
iny
|
||||
dex
|
||||
bne -
|
||||
rts
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; SoftBell
|
||||
;
|
||||
; in: none
|
||||
; out: all registers and flags clobbered
|
||||
;------------------------------------------------------------------------------
|
||||
SoftBell
|
||||
ldx #32
|
||||
- lda #2
|
||||
jsr ROM_WAIT
|
||||
bit SPEAKER
|
||||
lda #33
|
||||
jsr ROM_WAIT
|
||||
bit SPEAKER
|
||||
dex
|
||||
bne -
|
||||
rts
|
201
src/ui.font.a
Normal file
201
src/ui.font.a
Normal file
@ -0,0 +1,201 @@
|
||||
;license:MIT
|
||||
;(c) 2020 by 4am
|
||||
;
|
||||
; font drawing routines
|
||||
;
|
||||
|
||||
!macro COMPUTE_DRAW_ADDRESSES {
|
||||
ldx charrow
|
||||
lda HGRLO, x
|
||||
sta $F0
|
||||
sta $F2
|
||||
inc $F2
|
||||
lda HGRHI, x
|
||||
sta $F1 ; ($F0) -> base address of top row to draw (used for upper-left block of each character)
|
||||
sta $F3 ; ($F2) -> base address + 1 of top row to draw (used for upper-right block of each character)
|
||||
ldx char ; X = 0-based index into LeftFontRow0 array for the character we're drawing
|
||||
ldy HTAB
|
||||
}
|
||||
|
||||
!macro INC_AND_RECOMPUTE_DRAW_ADDRESSES {
|
||||
inc charrow
|
||||
+COMPUTE_DRAW_ADDRESSES
|
||||
}
|
||||
|
||||
DrawCharacter
|
||||
; A contains character (0x41..0x5A)
|
||||
; X contains logical line number (0x00..0x08)
|
||||
; Y contains logical column number (0x00..0x0C)
|
||||
; HGR row is (0x16 * X)
|
||||
; which needs to total no more than 0xB0
|
||||
; character will be drawn on HGR row, byte offset (GlobalLeftMargin + (3 * Y))
|
||||
; which needs to total no more than 0x26
|
||||
; preserves X/Y
|
||||
; clobbers A/all flags
|
||||
; clobbers $ED..$F7
|
||||
sta original_char
|
||||
and #$7F
|
||||
sec
|
||||
sbc #$41
|
||||
bpl +
|
||||
rts
|
||||
+ sta char
|
||||
stx @x+1
|
||||
sty @y+1
|
||||
jsr LogicalColumnToPhysicalColumn
|
||||
sty HTAB
|
||||
lda #$00
|
||||
clc
|
||||
bcc +
|
||||
- adc #$16
|
||||
+ dex
|
||||
bpl -
|
||||
sta charrow
|
||||
|
||||
+COMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow0, x ; draw row 0, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow0, x ; draw row 0, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow1, x ; draw row 1, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow1, x ; draw row 1, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow2, x ; draw row 2, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow2, x ; draw row 2, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow3, x ; draw row 3, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow3, x ; draw row 3, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow4, x ; draw row 4, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow4, x ; draw row 4, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow5, x ; draw row 5, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow5, x ; draw row 5, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow6, x ; draw row 6, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow6, x ; draw row 6, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow7, x ; draw row 7, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow7, x ; draw row 7, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow8, x ; draw row 8, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow8, x ; draw row 8, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow9, x ; draw row 9, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow9, x ; draw row 9, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow10, x ; draw row 10, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow10, x ; draw row 10, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow11, x ; draw row 11, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow11, x ; draw row 11, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow12, x ; draw row 12, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow12, x ; draw row 12, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow13, x ; draw row 13, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow13, x ; draw row 13, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
lda LeftFontRow14, x ; draw row 14, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow14, x ; draw row 14, byte 1
|
||||
sta ($F2), y
|
||||
|
||||
+INC_AND_RECOMPUTE_DRAW_ADDRESSES
|
||||
bit original_char
|
||||
bmi +
|
||||
lda LeftFontRow15, x ; draw row 15, byte 0
|
||||
sta ($F0), y
|
||||
lda RightFontRow15, x ; draw row 15, byte 1
|
||||
sta ($F2), y
|
||||
jmp ++
|
||||
+ lda #0
|
||||
sta ($F0), y
|
||||
sta ($F2), y
|
||||
++
|
||||
@x ldx #$FD ; SMC
|
||||
@y ldy #$FD ; SMC
|
||||
rts
|
865
src/ui.font.data.a
Normal file
865
src/ui.font.data.a
Normal file
@ -0,0 +1,865 @@
|
||||
; This file is automatically generated
|
||||
LeftFontRow0
|
||||
!byte $80 ; A
|
||||
!byte $80 ; B
|
||||
!byte $80 ; C
|
||||
!byte $80 ; D
|
||||
!byte $80 ; E
|
||||
!byte $80 ; F
|
||||
!byte $80 ; G
|
||||
!byte $80 ; H
|
||||
!byte $80 ; I
|
||||
!byte $80 ; J
|
||||
!byte $80 ; K
|
||||
!byte $80 ; L
|
||||
!byte $80 ; M
|
||||
!byte $80 ; N
|
||||
!byte $80 ; O
|
||||
!byte $80 ; P
|
||||
!byte $F0 ; Q
|
||||
!byte $80 ; R
|
||||
!byte $80 ; S
|
||||
!byte $80 ; T
|
||||
!byte $80 ; U
|
||||
!byte $80 ; V
|
||||
!byte $80 ; W
|
||||
!byte $80 ; X
|
||||
!byte $80 ; Y
|
||||
!byte $80 ; Z
|
||||
LeftFontRow1
|
||||
!byte $FC ; A
|
||||
!byte $FE ; B
|
||||
!byte $E0 ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $E0 ; G
|
||||
!byte $BE ; H
|
||||
!byte $FC ; I
|
||||
!byte $F0 ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $9E ; M
|
||||
!byte $9E ; N
|
||||
!byte $E0 ; O
|
||||
!byte $FE ; P
|
||||
!byte $F8 ; Q
|
||||
!byte $FE ; R
|
||||
!byte $F0 ; S
|
||||
!byte $FE ; T
|
||||
!byte $BE ; U
|
||||
!byte $BF ; V
|
||||
!byte $BF ; W
|
||||
!byte $FE ; X
|
||||
!byte $BF ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow2
|
||||
!byte $FC ; A
|
||||
!byte $FE ; B
|
||||
!byte $F8 ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $F8 ; G
|
||||
!byte $BE ; H
|
||||
!byte $FE ; I
|
||||
!byte $F0 ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $BE ; M
|
||||
!byte $BE ; N
|
||||
!byte $F8 ; O
|
||||
!byte $FE ; P
|
||||
!byte $FC ; Q
|
||||
!byte $FE ; R
|
||||
!byte $F8 ; S
|
||||
!byte $FE ; T
|
||||
!byte $BE ; U
|
||||
!byte $BF ; V
|
||||
!byte $BF ; W
|
||||
!byte $FE ; X
|
||||
!byte $BF ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow3
|
||||
!byte $FC ; A
|
||||
!byte $FE ; B
|
||||
!byte $FC ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $FC ; G
|
||||
!byte $BE ; H
|
||||
!byte $FC ; I
|
||||
!byte $F0 ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $BE ; M
|
||||
!byte $FC ; N
|
||||
!byte $FC ; O
|
||||
!byte $FE ; P
|
||||
!byte $9C ; Q
|
||||
!byte $FE ; R
|
||||
!byte $FC ; S
|
||||
!byte $FE ; T
|
||||
!byte $BE ; U
|
||||
!byte $BF ; V
|
||||
!byte $BF ; W
|
||||
!byte $FE ; X
|
||||
!byte $BF ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow4
|
||||
!byte $F0 ; A
|
||||
!byte $B8 ; B
|
||||
!byte $BC ; C
|
||||
!byte $B8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $BC ; G
|
||||
!byte $9C ; H
|
||||
!byte $E0 ; I
|
||||
!byte $80 ; J
|
||||
!byte $B8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $FC ; M
|
||||
!byte $FC ; N
|
||||
!byte $BC ; O
|
||||
!byte $B8 ; P
|
||||
!byte $8E ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $9C ; S
|
||||
!byte $CE ; T
|
||||
!byte $9C ; U
|
||||
!byte $9C ; V
|
||||
!byte $8E ; W
|
||||
!byte $B8 ; X
|
||||
!byte $9C ; Y
|
||||
!byte $9C ; Z
|
||||
LeftFontRow5
|
||||
!byte $F0 ; A
|
||||
!byte $B8 ; B
|
||||
!byte $9E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $9E ; G
|
||||
!byte $9C ; H
|
||||
!byte $E0 ; I
|
||||
!byte $80 ; J
|
||||
!byte $B8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $FC ; M
|
||||
!byte $FC ; N
|
||||
!byte $9E ; O
|
||||
!byte $B8 ; P
|
||||
!byte $8E ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $9C ; S
|
||||
!byte $CE ; T
|
||||
!byte $9C ; U
|
||||
!byte $9C ; V
|
||||
!byte $8C ; W
|
||||
!byte $F0 ; X
|
||||
!byte $B8 ; Y
|
||||
!byte $9C ; Z
|
||||
LeftFontRow6
|
||||
!byte $B0 ; A
|
||||
!byte $F8 ; B
|
||||
!byte $8E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $F8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $8E ; G
|
||||
!byte $FC ; H
|
||||
!byte $E0 ; I
|
||||
!byte $80 ; J
|
||||
!byte $B8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $FC ; M
|
||||
!byte $DC ; N
|
||||
!byte $8E ; O
|
||||
!byte $B8 ; P
|
||||
!byte $8E ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $BC ; S
|
||||
!byte $CE ; T
|
||||
!byte $9C ; U
|
||||
!byte $B8 ; V
|
||||
!byte $CC ; W
|
||||
!byte $F0 ; X
|
||||
!byte $F0 ; Y
|
||||
!byte $9C ; Z
|
||||
LeftFontRow7
|
||||
!byte $B8 ; A
|
||||
!byte $F8 ; B
|
||||
!byte $8E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $F8 ; E
|
||||
!byte $F8 ; F
|
||||
!byte $8E ; G
|
||||
!byte $FC ; H
|
||||
!byte $E0 ; I
|
||||
!byte $80 ; J
|
||||
!byte $F8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $DC ; M
|
||||
!byte $DC ; N
|
||||
!byte $8E ; O
|
||||
!byte $B8 ; P
|
||||
!byte $8E ; Q
|
||||
!byte $F8 ; R
|
||||
!byte $F8 ; S
|
||||
!byte $CE ; T
|
||||
!byte $9C ; U
|
||||
!byte $B8 ; V
|
||||
!byte $CC ; W
|
||||
!byte $E0 ; X
|
||||
!byte $F0 ; Y
|
||||
!byte $C0 ; Z
|
||||
LeftFontRow8
|
||||
!byte $F8 ; A
|
||||
!byte $F8 ; B
|
||||
!byte $8E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $F8 ; E
|
||||
!byte $F8 ; F
|
||||
!byte $8E ; G
|
||||
!byte $FC ; H
|
||||
!byte $E0 ; I
|
||||
!byte $8E ; J
|
||||
!byte $F8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $DC ; M
|
||||
!byte $9C ; N
|
||||
!byte $8E ; O
|
||||
!byte $F8 ; P
|
||||
!byte $9C ; Q
|
||||
!byte $F8 ; R
|
||||
!byte $E0 ; S
|
||||
!byte $C0 ; T
|
||||
!byte $9C ; U
|
||||
!byte $B8 ; V
|
||||
!byte $EC ; W
|
||||
!byte $E0 ; X
|
||||
!byte $E0 ; Y
|
||||
!byte $E0 ; Z
|
||||
LeftFontRow9
|
||||
!byte $F8 ; A
|
||||
!byte $B8 ; B
|
||||
!byte $8E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $F8 ; F
|
||||
!byte $8E ; G
|
||||
!byte $9C ; H
|
||||
!byte $E0 ; I
|
||||
!byte $8E ; J
|
||||
!byte $F8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $DC ; M
|
||||
!byte $9C ; N
|
||||
!byte $8E ; O
|
||||
!byte $F8 ; P
|
||||
!byte $FC ; Q
|
||||
!byte $F8 ; R
|
||||
!byte $80 ; S
|
||||
!byte $C0 ; T
|
||||
!byte $9C ; U
|
||||
!byte $F0 ; V
|
||||
!byte $EC ; W
|
||||
!byte $F0 ; X
|
||||
!byte $C0 ; Y
|
||||
!byte $E0 ; Z
|
||||
LeftFontRow10
|
||||
!byte $FC ; A
|
||||
!byte $B8 ; B
|
||||
!byte $9E ; C
|
||||
!byte $B8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $9E ; G
|
||||
!byte $9C ; H
|
||||
!byte $E0 ; I
|
||||
!byte $8E ; J
|
||||
!byte $B8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $9C ; M
|
||||
!byte $9C ; N
|
||||
!byte $9E ; O
|
||||
!byte $F8 ; P
|
||||
!byte $F8 ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $8C ; S
|
||||
!byte $C0 ; T
|
||||
!byte $9C ; U
|
||||
!byte $F0 ; V
|
||||
!byte $FC ; W
|
||||
!byte $B8 ; X
|
||||
!byte $C0 ; Y
|
||||
!byte $B0 ; Z
|
||||
LeftFontRow11
|
||||
!byte $9C ; A
|
||||
!byte $B8 ; B
|
||||
!byte $BC ; C
|
||||
!byte $B8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $BC ; G
|
||||
!byte $9C ; H
|
||||
!byte $E0 ; I
|
||||
!byte $9E ; J
|
||||
!byte $B8 ; K
|
||||
!byte $B8 ; L
|
||||
!byte $9C ; M
|
||||
!byte $9C ; N
|
||||
!byte $9C ; O
|
||||
!byte $B8 ; P
|
||||
!byte $E0 ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $9C ; S
|
||||
!byte $C0 ; T
|
||||
!byte $BC ; U
|
||||
!byte $E0 ; V
|
||||
!byte $BC ; W
|
||||
!byte $9C ; X
|
||||
!byte $C0 ; Y
|
||||
!byte $98 ; Z
|
||||
LeftFontRow12
|
||||
!byte $BF ; A
|
||||
!byte $FE ; B
|
||||
!byte $FC ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $FC ; G
|
||||
!byte $BE ; H
|
||||
!byte $FE ; I
|
||||
!byte $FE ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $FE ; M
|
||||
!byte $BE ; N
|
||||
!byte $FC ; O
|
||||
!byte $FE ; P
|
||||
!byte $B0 ; Q
|
||||
!byte $FE ; R
|
||||
!byte $FC ; S
|
||||
!byte $F8 ; T
|
||||
!byte $FC ; U
|
||||
!byte $E0 ; V
|
||||
!byte $BC ; W
|
||||
!byte $BF ; X
|
||||
!byte $F8 ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow13
|
||||
!byte $BF ; A
|
||||
!byte $FE ; B
|
||||
!byte $F8 ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $F8 ; G
|
||||
!byte $BE ; H
|
||||
!byte $FE ; I
|
||||
!byte $FC ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $FE ; M
|
||||
!byte $BE ; N
|
||||
!byte $F8 ; O
|
||||
!byte $FE ; P
|
||||
!byte $F8 ; Q
|
||||
!byte $FE ; R
|
||||
!byte $FC ; S
|
||||
!byte $F8 ; T
|
||||
!byte $F8 ; U
|
||||
!byte $E0 ; V
|
||||
!byte $BC ; W
|
||||
!byte $BF ; X
|
||||
!byte $F8 ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow14
|
||||
!byte $BF ; A
|
||||
!byte $FE ; B
|
||||
!byte $E0 ; C
|
||||
!byte $FE ; D
|
||||
!byte $FE ; E
|
||||
!byte $FE ; F
|
||||
!byte $E0 ; G
|
||||
!byte $BE ; H
|
||||
!byte $FE ; I
|
||||
!byte $F8 ; J
|
||||
!byte $FE ; K
|
||||
!byte $FE ; L
|
||||
!byte $FE ; M
|
||||
!byte $BE ; N
|
||||
!byte $E0 ; O
|
||||
!byte $FE ; P
|
||||
!byte $FC ; Q
|
||||
!byte $FE ; R
|
||||
!byte $DC ; S
|
||||
!byte $F8 ; T
|
||||
!byte $F0 ; U
|
||||
!byte $C0 ; V
|
||||
!byte $98 ; W
|
||||
!byte $BF ; X
|
||||
!byte $F8 ; Y
|
||||
!byte $FC ; Z
|
||||
LeftFontRow15
|
||||
!byte $80 ; A
|
||||
!byte $80 ; B
|
||||
!byte $80 ; C
|
||||
!byte $80 ; D
|
||||
!byte $80 ; E
|
||||
!byte $80 ; F
|
||||
!byte $80 ; G
|
||||
!byte $80 ; H
|
||||
!byte $80 ; I
|
||||
!byte $80 ; J
|
||||
!byte $80 ; K
|
||||
!byte $80 ; L
|
||||
!byte $80 ; M
|
||||
!byte $80 ; N
|
||||
!byte $80 ; O
|
||||
!byte $80 ; P
|
||||
!byte $FC ; Q
|
||||
!byte $80 ; R
|
||||
!byte $80 ; S
|
||||
!byte $80 ; T
|
||||
!byte $80 ; U
|
||||
!byte $80 ; V
|
||||
!byte $80 ; W
|
||||
!byte $80 ; X
|
||||
!byte $80 ; Y
|
||||
!byte $80 ; Z
|
||||
RightFontRow0
|
||||
!byte $80 ; A
|
||||
!byte $80 ; B
|
||||
!byte $80 ; C
|
||||
!byte $80 ; D
|
||||
!byte $80 ; E
|
||||
!byte $80 ; F
|
||||
!byte $80 ; G
|
||||
!byte $80 ; H
|
||||
!byte $80 ; I
|
||||
!byte $80 ; J
|
||||
!byte $80 ; K
|
||||
!byte $80 ; L
|
||||
!byte $80 ; M
|
||||
!byte $80 ; N
|
||||
!byte $80 ; O
|
||||
!byte $80 ; P
|
||||
!byte $87 ; Q
|
||||
!byte $80 ; R
|
||||
!byte $80 ; S
|
||||
!byte $80 ; T
|
||||
!byte $80 ; U
|
||||
!byte $80 ; V
|
||||
!byte $80 ; W
|
||||
!byte $80 ; X
|
||||
!byte $80 ; Y
|
||||
!byte $80 ; Z
|
||||
RightFontRow1
|
||||
!byte $83 ; A
|
||||
!byte $87 ; B
|
||||
!byte $BB ; C
|
||||
!byte $87 ; D
|
||||
!byte $BF ; E
|
||||
!byte $BF ; F
|
||||
!byte $BB ; G
|
||||
!byte $BE ; H
|
||||
!byte $8F ; I
|
||||
!byte $FF ; J
|
||||
!byte $BE ; K
|
||||
!byte $83 ; L
|
||||
!byte $F8 ; M
|
||||
!byte $BE ; N
|
||||
!byte $87 ; O
|
||||
!byte $87 ; P
|
||||
!byte $8F ; Q
|
||||
!byte $8F ; R
|
||||
!byte $8D ; S
|
||||
!byte $BF ; T
|
||||
!byte $BE ; U
|
||||
!byte $FE ; V
|
||||
!byte $FC ; W
|
||||
!byte $FE ; X
|
||||
!byte $FE ; Y
|
||||
!byte $9F ; Z
|
||||
RightFontRow2
|
||||
!byte $87 ; A
|
||||
!byte $8F ; B
|
||||
!byte $BF ; C
|
||||
!byte $9F ; D
|
||||
!byte $BF ; E
|
||||
!byte $BF ; F
|
||||
!byte $BF ; G
|
||||
!byte $BE ; H
|
||||
!byte $9F ; I
|
||||
!byte $FF ; J
|
||||
!byte $FE ; K
|
||||
!byte $83 ; L
|
||||
!byte $FC ; M
|
||||
!byte $BE ; N
|
||||
!byte $9F ; O
|
||||
!byte $9F ; P
|
||||
!byte $9F ; Q
|
||||
!byte $9F ; R
|
||||
!byte $8F ; S
|
||||
!byte $BF ; T
|
||||
!byte $BE ; U
|
||||
!byte $FE ; V
|
||||
!byte $FC ; W
|
||||
!byte $FE ; X
|
||||
!byte $FE ; Y
|
||||
!byte $9F ; Z
|
||||
RightFontRow3
|
||||
!byte $87 ; A
|
||||
!byte $9F ; B
|
||||
!byte $BF ; C
|
||||
!byte $BF ; D
|
||||
!byte $BF ; E
|
||||
!byte $BF ; F
|
||||
!byte $BF ; G
|
||||
!byte $BE ; H
|
||||
!byte $8F ; I
|
||||
!byte $FF ; J
|
||||
!byte $FE ; K
|
||||
!byte $83 ; L
|
||||
!byte $FC ; M
|
||||
!byte $9C ; N
|
||||
!byte $BF ; O
|
||||
!byte $9F ; P
|
||||
!byte $9C ; Q
|
||||
!byte $BF ; R
|
||||
!byte $8F ; S
|
||||
!byte $BF ; T
|
||||
!byte $BE ; U
|
||||
!byte $FE ; V
|
||||
!byte $FC ; W
|
||||
!byte $FE ; X
|
||||
!byte $FE ; Y
|
||||
!byte $8F ; Z
|
||||
RightFontRow4
|
||||
!byte $87 ; A
|
||||
!byte $9C ; B
|
||||
!byte $BC ; C
|
||||
!byte $BC ; D
|
||||
!byte $B8 ; E
|
||||
!byte $B8 ; F
|
||||
!byte $BC ; G
|
||||
!byte $9C ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $9C ; K
|
||||
!byte $80 ; L
|
||||
!byte $BE ; M
|
||||
!byte $9C ; N
|
||||
!byte $BC ; O
|
||||
!byte $BC ; P
|
||||
!byte $B8 ; Q
|
||||
!byte $BC ; R
|
||||
!byte $8C ; S
|
||||
!byte $BB ; T
|
||||
!byte $9C ; U
|
||||
!byte $B8 ; V
|
||||
!byte $F0 ; W
|
||||
!byte $9C ; X
|
||||
!byte $9C ; Y
|
||||
!byte $8E ; Z
|
||||
RightFontRow5
|
||||
!byte $8E ; A
|
||||
!byte $9C ; B
|
||||
!byte $B8 ; C
|
||||
!byte $F8 ; D
|
||||
!byte $80 ; E
|
||||
!byte $80 ; F
|
||||
!byte $B8 ; G
|
||||
!byte $9C ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $8E ; K
|
||||
!byte $80 ; L
|
||||
!byte $BE ; M
|
||||
!byte $9C ; N
|
||||
!byte $F8 ; O
|
||||
!byte $B8 ; P
|
||||
!byte $B8 ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $80 ; S
|
||||
!byte $BB ; T
|
||||
!byte $9C ; U
|
||||
!byte $9C ; V
|
||||
!byte $B1 ; W
|
||||
!byte $8E ; X
|
||||
!byte $9E ; Y
|
||||
!byte $86 ; Z
|
||||
RightFontRow6
|
||||
!byte $8E ; A
|
||||
!byte $8F ; B
|
||||
!byte $B8 ; C
|
||||
!byte $F0 ; D
|
||||
!byte $83 ; E
|
||||
!byte $80 ; F
|
||||
!byte $B8 ; G
|
||||
!byte $9F ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $87 ; K
|
||||
!byte $80 ; L
|
||||
!byte $BE ; M
|
||||
!byte $9D ; N
|
||||
!byte $F0 ; O
|
||||
!byte $B8 ; P
|
||||
!byte $B8 ; Q
|
||||
!byte $B8 ; R
|
||||
!byte $80 ; S
|
||||
!byte $BB ; T
|
||||
!byte $9C ; U
|
||||
!byte $9C ; V
|
||||
!byte $B3 ; W
|
||||
!byte $87 ; X
|
||||
!byte $8F ; Y
|
||||
!byte $83 ; Z
|
||||
RightFontRow7
|
||||
!byte $8E ; A
|
||||
!byte $8F ; B
|
||||
!byte $80 ; C
|
||||
!byte $F0 ; D
|
||||
!byte $87 ; E
|
||||
!byte $87 ; F
|
||||
!byte $80 ; G
|
||||
!byte $9F ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $83 ; K
|
||||
!byte $90 ; L
|
||||
!byte $BB ; M
|
||||
!byte $9D ; N
|
||||
!byte $F0 ; O
|
||||
!byte $BC ; P
|
||||
!byte $B8 ; Q
|
||||
!byte $9F ; R
|
||||
!byte $87 ; S
|
||||
!byte $BB ; T
|
||||
!byte $9C ; U
|
||||
!byte $9E ; V
|
||||
!byte $B3 ; W
|
||||
!byte $83 ; X
|
||||
!byte $87 ; Y
|
||||
!byte $81 ; Z
|
||||
RightFontRow8
|
||||
!byte $9F ; A
|
||||
!byte $9F ; B
|
||||
!byte $80 ; C
|
||||
!byte $F0 ; D
|
||||
!byte $83 ; E
|
||||
!byte $87 ; F
|
||||
!byte $FF ; G
|
||||
!byte $9F ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $8F ; K
|
||||
!byte $B8 ; L
|
||||
!byte $BB ; M
|
||||
!byte $9F ; N
|
||||
!byte $F0 ; O
|
||||
!byte $BF ; P
|
||||
!byte $9C ; Q
|
||||
!byte $8F ; R
|
||||
!byte $8F ; S
|
||||
!byte $83 ; T
|
||||
!byte $9C ; U
|
||||
!byte $8E ; V
|
||||
!byte $B7 ; W
|
||||
!byte $87 ; X
|
||||
!byte $87 ; Y
|
||||
!byte $80 ; Z
|
||||
RightFontRow9
|
||||
!byte $9F ; A
|
||||
!byte $B8 ; B
|
||||
!byte $80 ; C
|
||||
!byte $F0 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $87 ; F
|
||||
!byte $FF ; G
|
||||
!byte $9C ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $8F ; K
|
||||
!byte $B8 ; L
|
||||
!byte $BB ; M
|
||||
!byte $9F ; N
|
||||
!byte $F0 ; O
|
||||
!byte $9F ; P
|
||||
!byte $9F ; Q
|
||||
!byte $8F ; R
|
||||
!byte $9E ; S
|
||||
!byte $83 ; T
|
||||
!byte $9C ; U
|
||||
!byte $8E ; V
|
||||
!byte $B6 ; W
|
||||
!byte $87 ; X
|
||||
!byte $83 ; Y
|
||||
!byte $9C ; Z
|
||||
RightFontRow10
|
||||
!byte $9F ; A
|
||||
!byte $B8 ; B
|
||||
!byte $80 ; C
|
||||
!byte $F8 ; D
|
||||
!byte $B8 ; E
|
||||
!byte $80 ; F
|
||||
!byte $FF ; G
|
||||
!byte $9C ; H
|
||||
!byte $81 ; I
|
||||
!byte $8E ; J
|
||||
!byte $9C ; K
|
||||
!byte $B8 ; L
|
||||
!byte $B9 ; M
|
||||
!byte $9E ; N
|
||||
!byte $F8 ; O
|
||||
!byte $87 ; P
|
||||
!byte $8F ; Q
|
||||
!byte $9E ; R
|
||||
!byte $9C ; S
|
||||
!byte $83 ; T
|
||||
!byte $9C ; U
|
||||
!byte $87 ; V
|
||||
!byte $BE ; W
|
||||
!byte $8E ; X
|
||||
!byte $83 ; Y
|
||||
!byte $9C ; Z
|
||||
RightFontRow11
|
||||
!byte $B8 ; A
|
||||
!byte $B8 ; B
|
||||
!byte $B8 ; C
|
||||
!byte $BC ; D
|
||||
!byte $B8 ; E
|
||||
!byte $80 ; F
|
||||
!byte $B8 ; G
|
||||
!byte $9C ; H
|
||||
!byte $81 ; I
|
||||
!byte $8F ; J
|
||||
!byte $9C ; K
|
||||
!byte $B8 ; L
|
||||
!byte $B8 ; M
|
||||
!byte $9E ; N
|
||||
!byte $BC ; O
|
||||
!byte $80 ; P
|
||||
!byte $87 ; Q
|
||||
!byte $BC ; R
|
||||
!byte $9C ; S
|
||||
!byte $83 ; T
|
||||
!byte $9E ; U
|
||||
!byte $87 ; V
|
||||
!byte $BE ; W
|
||||
!byte $9C ; X
|
||||
!byte $83 ; Y
|
||||
!byte $9C ; Z
|
||||
RightFontRow12
|
||||
!byte $FE ; A
|
||||
!byte $BF ; B
|
||||
!byte $BF ; C
|
||||
!byte $BF ; D
|
||||
!byte $BF ; E
|
||||
!byte $83 ; F
|
||||
!byte $BF ; G
|
||||
!byte $BE ; H
|
||||
!byte $9F ; I
|
||||
!byte $8F ; J
|
||||
!byte $F9 ; K
|
||||
!byte $BF ; L
|
||||
!byte $FE ; M
|
||||
!byte $9C ; N
|
||||
!byte $BF ; O
|
||||
!byte $83 ; P
|
||||
!byte $90 ; Q
|
||||
!byte $FD ; R
|
||||
!byte $9F ; S
|
||||
!byte $9F ; T
|
||||
!byte $9F ; U
|
||||
!byte $83 ; V
|
||||
!byte $BC ; W
|
||||
!byte $FE ; X
|
||||
!byte $9F ; Y
|
||||
!byte $9F ; Z
|
||||
RightFontRow13
|
||||
!byte $FE ; A
|
||||
!byte $9F ; B
|
||||
!byte $BF ; C
|
||||
!byte $9F ; D
|
||||
!byte $BF ; E
|
||||
!byte $83 ; F
|
||||
!byte $BF ; G
|
||||
!byte $BE ; H
|
||||
!byte $9F ; I
|
||||
!byte $87 ; J
|
||||
!byte $F9 ; K
|
||||
!byte $BF ; L
|
||||
!byte $FE ; M
|
||||
!byte $9C ; N
|
||||
!byte $9F ; O
|
||||
!byte $83 ; P
|
||||
!byte $BF ; Q
|
||||
!byte $F9 ; R
|
||||
!byte $8F ; S
|
||||
!byte $9F ; T
|
||||
!byte $8F ; U
|
||||
!byte $83 ; V
|
||||
!byte $9C ; W
|
||||
!byte $FE ; X
|
||||
!byte $9F ; Y
|
||||
!byte $9F ; Z
|
||||
RightFontRow14
|
||||
!byte $FE ; A
|
||||
!byte $8F ; B
|
||||
!byte $8F ; C
|
||||
!byte $87 ; D
|
||||
!byte $BF ; E
|
||||
!byte $83 ; F
|
||||
!byte $8F ; G
|
||||
!byte $BE ; H
|
||||
!byte $9F ; I
|
||||
!byte $83 ; J
|
||||
!byte $F1 ; K
|
||||
!byte $BF ; L
|
||||
!byte $FE ; M
|
||||
!byte $98 ; N
|
||||
!byte $87 ; O
|
||||
!byte $83 ; P
|
||||
!byte $BF ; Q
|
||||
!byte $F1 ; R
|
||||
!byte $87 ; S
|
||||
!byte $9F ; T
|
||||
!byte $87 ; U
|
||||
!byte $83 ; V
|
||||
!byte $9C ; W
|
||||
!byte $FE ; X
|
||||
!byte $9F ; Y
|
||||
!byte $9F ; Z
|
||||
RightFontRow15
|
||||
!byte $80 ; A
|
||||
!byte $80 ; B
|
||||
!byte $80 ; C
|
||||
!byte $80 ; D
|
||||
!byte $80 ; E
|
||||
!byte $80 ; F
|
||||
!byte $80 ; G
|
||||
!byte $80 ; H
|
||||
!byte $80 ; I
|
||||
!byte $80 ; J
|
||||
!byte $80 ; K
|
||||
!byte $80 ; L
|
||||
!byte $80 ; M
|
||||
!byte $80 ; N
|
||||
!byte $80 ; O
|
||||
!byte $80 ; P
|
||||
!byte $9F ; Q
|
||||
!byte $80 ; R
|
||||
!byte $80 ; S
|
||||
!byte $80 ; T
|
||||
!byte $80 ; U
|
||||
!byte $80 ; V
|
||||
!byte $80 ; W
|
||||
!byte $80 ; X
|
||||
!byte $80 ; Y
|
||||
!byte $80 ; Z
|
130
src/ui.title.a
Normal file
130
src/ui.title.a
Normal file
@ -0,0 +1,130 @@
|
||||
TitlePage
|
||||
jsr Home
|
||||
;TODO add logical-width parameter
|
||||
jsr DrawThinLines
|
||||
|
||||
lda #3
|
||||
sta row
|
||||
+LDADDR title
|
||||
+ST16 $FE
|
||||
-- lda #6
|
||||
sta column
|
||||
- ldy column
|
||||
lda ($FE), y
|
||||
ldx row
|
||||
jsr DrawCharacter
|
||||
dec column
|
||||
bpl -
|
||||
lda $FE
|
||||
clc
|
||||
adc #7
|
||||
sta $FE
|
||||
bcc +
|
||||
inc $FF
|
||||
+ inc row
|
||||
lda row
|
||||
cmp #6
|
||||
bne --
|
||||
|
||||
bit GFXMODE
|
||||
|
||||
lda #$00
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
|
||||
ldy #$00
|
||||
jsr ScrollUp
|
||||
ldy #$02
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
ldy #$05
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
|
||||
@loop
|
||||
+RTS_IF_KEY
|
||||
lda #$00
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
|
||||
ldy #$00
|
||||
jsr ScrollDown
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollDown
|
||||
jsr ScrollDown
|
||||
|
||||
+RTS_IF_KEY
|
||||
lda #$00
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
|
||||
ldy #$00
|
||||
jsr ScrollUp
|
||||
ldy #$02
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollDown
|
||||
ldy #$05
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollUp
|
||||
|
||||
+RTS_IF_KEY
|
||||
lda #$00
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
jsr ROM_WAIT
|
||||
+RTS_IF_KEY
|
||||
rts
|
||||
!if 0 {
|
||||
ldy #$00
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollDown
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollUp
|
||||
iny
|
||||
jsr ScrollDown
|
||||
jsr ScrollDown
|
||||
iny
|
||||
jsr ScrollUp
|
||||
|
||||
jmp @loop
|
||||
}
|
||||
title
|
||||
!raw "PELTEOT"
|
||||
!raw "LIRFICS"
|
||||
!raw "M TL RN"
|
Loading…
x
Reference in New Issue
Block a user