First commit
This commit is contained in:
commit
25f04d9a1c
|
@ -0,0 +1,2 @@
|
||||||
|
*.inc
|
||||||
|
*.com
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2022 Lynn
|
||||||
|
Copyright (c) 2022 Juhani 'nortti' Krekelä
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,20 @@
|
||||||
|
NASM ?= nasm
|
||||||
|
PYTHON ?= python
|
||||||
|
|
||||||
|
all: dosdl.com
|
||||||
|
|
||||||
|
dosdl.com: dosdl.asm dictionary.inc targets.inc
|
||||||
|
$(NASM) -fbin -o $@ $<
|
||||||
|
|
||||||
|
dictionary.inc: dictionary.json compress-dict.py
|
||||||
|
$(PYTHON) compress-dict.py $< $@
|
||||||
|
|
||||||
|
targets.inc: targets.json compress-targets.py
|
||||||
|
$(PYTHON) compress-targets.py $< $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.inc *.com
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
|
||||||
|
.PHONY: all clean distclean
|
|
@ -0,0 +1,15 @@
|
||||||
|
hello DOSdl
|
||||||
|
===========
|
||||||
|
Hello DOSdl is a variant of Wordle / hello wordl for MS-DOS running on IBM PC
|
||||||
|
compatible systems.
|
||||||
|
|
||||||
|
Word lists
|
||||||
|
----------
|
||||||
|
The words lists are taken from
|
||||||
|
[hello wordl](https://github.com/lynn/hello-wordl) and are identical as of
|
||||||
|
2022-02-02, to allow cross-play between hello DOSdl and hello wordl. See the
|
||||||
|
link for further details.
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
---------
|
||||||
|
Hello DOSdl is free software under the MIT license. See LICENSE for details.
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
alphabet = 'abcdefghijklmnopqrstuvwxyz'
|
||||||
|
|
||||||
|
srcpath = sys.argv[1]
|
||||||
|
targetpath = sys.argv[2]
|
||||||
|
|
||||||
|
with open(srcpath, 'r') as f:
|
||||||
|
words = json.load(f)
|
||||||
|
|
||||||
|
# We only care about 5-letter words
|
||||||
|
words = [word for word in words if len(word) == 5]
|
||||||
|
|
||||||
|
# Split dictionary into per-startletter arrays
|
||||||
|
arrays = {letter: [] for letter in alphabet}
|
||||||
|
for word in words:
|
||||||
|
assert word[0] in alphabet
|
||||||
|
number = 0
|
||||||
|
# First letter is implicit
|
||||||
|
for index, letter in enumerate(word[1:]):
|
||||||
|
number += alphabet.index(letter) << (5 * index)
|
||||||
|
packed = bytes([number & 0xff, (number >> 8) & 0xff, number >> 16])
|
||||||
|
arrays[word[0]].append(packed)
|
||||||
|
|
||||||
|
with open(targetpath, 'w') as f:
|
||||||
|
for startletter, array in arrays.items():
|
||||||
|
f.write(f'dictionary_{startletter}:\n')
|
||||||
|
for packed in array:
|
||||||
|
f.write(f'\tdb {", ".join(str(byte) for byte in packed)}\n')
|
||||||
|
f.write('\n')
|
||||||
|
|
||||||
|
f.write('dictionaries:\n')
|
||||||
|
for startletter in arrays:
|
||||||
|
f.write(f'\tdw dictionary_{startletter}\n')
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
alphabet = 'abcdefghijklmnopqrstuvwxyz*'
|
||||||
|
|
||||||
|
srcpath = sys.argv[1]
|
||||||
|
targetpath = sys.argv[2]
|
||||||
|
|
||||||
|
with open(srcpath, 'r') as f:
|
||||||
|
words = json.load(f)
|
||||||
|
|
||||||
|
# We only care about 5-letter words
|
||||||
|
words = [word for word in words if len(word) == 5]
|
||||||
|
|
||||||
|
array = []
|
||||||
|
for word in words:
|
||||||
|
number = 0
|
||||||
|
for index, letter in enumerate(word):
|
||||||
|
number += alphabet.index(letter) << (5 * index)
|
||||||
|
packed = bytes([number & 0xff, (number >> 8) & 0xff, (number >> 16) & 0xff, number >> 24])
|
||||||
|
array.append(packed)
|
||||||
|
|
||||||
|
with open(targetpath, 'w') as f:
|
||||||
|
f.write('tagets:\n')
|
||||||
|
for packed in array:
|
||||||
|
f.write(f'\tdb {", ".join(str(byte) for byte in packed)}\n')
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,6 @@
|
||||||
|
org 0x100
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
%include "dictionary.inc"
|
||||||
|
%include "targets.inc"
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue