commit
25f04d9a1c
9 changed files with 220796 additions and 0 deletions
@ -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') |
@ -0,0 +1,6 @@
|
||||
org 0x100 |
||||
|
||||
ret |
||||
|
||||
%include "dictionary.inc" |
||||
%include "targets.inc" |
Loading…
Reference in new issue