First commit - Create punch-card encoding script

This commit is contained in:
n loewen 2023-08-25 11:56:12 +01:00
commit 667897b31a
6 changed files with 159 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.vscode
.DS_Store

View File

@ -0,0 +1 @@
0000001100000010000000011111101000000011000000100000000111111011000000110010101100000001111111100000101100110001000000111111111100000010111111010000000000000000000001001111101000000001111111010000010011111011000011100000000100001011001111010000110011111110000001001111110100000101000001010000000111111101000001001111101100000111000000010000000111111011000011100000000100001011001111010000110011111110

View File

@ -0,0 +1,10 @@
01234567 01234567 01234567 01234567 01234567 01234567 01
▮▯▮▯▮▯▮▮ ▮▮▮▯▮▮▮▮ ▯▮▯▯▯▯▮▮ ▯▮▯▮▮▮▯▯ ▯▮▮▮▮▮▯▮ ▮▮▮▮▯▮▮▮ ▯▯
▮▮▯▮▮▮▯▮ ▮▮▯▮▮▯▮▮ ▮▯▯▯▯▮▯▯ ▯▮▮▯▮▯▯▮ ▯▯▯▯▯▯▯▮ ▮▯▯▮▮▯▮▯ ▯▮
▯▯▯▯▯▯▯▯ ▯▯▯▮▯▯▯▮ ▯▮▯▯▮▯▯▮ ▮▯▮▯▯▮▮▮ ▮▮▮▮▯▮▮▯ ▮▯▯▯▮▯▯▮ ▮▮
▯▯▯▮▯▯▯▮ ▯▮▯▮▮▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▮▯▮▮▮▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▮▯▮▮ ▮▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▮ ▯▮
▯▯▯▮▯▯▯▮ ▯▮▯▮▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▮ ▯▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▯ ▯▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▯ ▯▮
01234567 01234567 01234567 01234567 01234567 01234567 01

69
examples/draw-xy.asm Normal file
View File

@ -0,0 +1,69 @@
; Routine for drawing at (x, y) coordinates
#zeroflag 1
; *** Set your desired (x, y) here: ***
#input_x 2
#input_y 2
; Set up some handy shortcuts
#x $FA
#y $FB
#return_addr_ptr $FE
; Main:
LDA #input_x
STO #x
LDA #input_y
STO #y
LDA * 6 ; acc = current address + 6 (LDA, STO, JMP = 6)
STO #return_addr_ptr
JMP @getxy
LDA $FF
STO ($FD)
END
;; Convert a pair of (x, y) coords
;; to the address of a pixel on the display
;;
;; Call with:
;; - x in #x
;; - y in #y
;; - return address in #return_addr_ptr
;;
;; Returns: pixel address in $FD
@getxy
#gxy_px $FD
; stash x...
LDA (#x)
STO #gxy_px
; check if this is row 0...
LDA (#y)
FHP #zeroflag
JMP @getxy_loop
JMP (#return_addr_ptr) ; if row 0, we're done
@getxy_loop
LDA (#gxy_px)
ADD 5 ; add 5 to get to the next row
STO #gxy_px
LDA (#y) ; decrement y (it's acting as a loop counter)...
SUB 1
STO #y
FHP #zeroflag
JMP @getxy_loop
JMP (#return_addr_ptr)
;; Main variables:
;; F8
;; F9
;; FA - x coord
;; FB - y coord
;; FC - gxy temp
;; FD - gxy temp
;; FE - Return address for subroutine

49
punch-a-card.js Executable file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env node
// Input file must contain a binary string with no spaces, linebreaks, etc.
const fs = require('fs');
const filename = process.argv[2];
const inputFile_str = fs.readFileSync(filename, 'utf8');
const create_square_wave_string = (s) => {
s = s.replace(/1/g, '▮');
return s = s.replace(/0/g, '▯');
}
const number_hex_string = (quantity) => {
let output = '';
let current_digit = 0;
for (let i = 0; i < quantity; i++) {
current_digit = i % 8;
output = output + current_digit;
}
return output;
}
const binary_string_to_bus_strings = (input) => {
let output = ['','','','','','','',''];
let input_bytes = input.match(/.{1,8}/g);
input_bytes.forEach( (byte) => {
let byte_array = byte.split('');
for (let i = 0; i < 8; i++) {
output[i] = output[i] + byte_array[i];
}
});
// Print output
let nums = number_hex_string(output[0].length);
let spaced_nums = nums.match(/.{1,8}/g).join(' ');
console.log();
console.log(spaced_nums);
output.reverse().forEach( (s) => {
let spaced = s.match(/.{1,8}/g).join(' ');
console.log(create_square_wave_string(spaced));
});
console.log(spaced_nums);
console.log();
}
binary_string_to_bus_strings(inputFile_str);

28
readme.md Normal file
View File

@ -0,0 +1,28 @@
# Create punch card patterns from binary strings
This script turns a binary string into a pattern formatted for copying to an IBM-style 80-column punch card.
It is intended for creating drawings patterns based on programs for my imaginary computer.
## Use
```
./punch-a-card.js bin.txt
```
The input must be a text file containing nothing but 0s and 1s (no spaces, newlines, etc). It must be an even number of 8-bit bytes in length.
## Example output
```
01234567 01234567 01234567 01234567 01234567 01234567 01
▮▯▮▯▮▯▮▮ ▮▮▮▯▮▮▮▮ ▯▮▯▯▯▯▮▮ ▯▮▯▮▮▮▯▯ ▯▮▮▮▮▮▯▮ ▮▮▮▮▯▮▮▮ ▯▯
▮▮▯▮▮▮▯▮ ▮▮▯▮▮▯▮▮ ▮▯▯▯▯▮▯▯ ▯▮▮▯▮▯▯▮ ▯▯▯▯▯▯▯▮ ▮▯▯▮▮▯▮▯ ▯▮
▯▯▯▯▯▯▯▯ ▯▯▯▮▯▯▯▮ ▯▮▯▯▮▯▯▮ ▮▯▮▯▯▮▮▮ ▮▮▮▮▯▮▮▯ ▮▯▯▯▮▯▯▮ ▮▮
▯▯▯▮▯▯▯▮ ▯▮▯▮▮▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▮▯▮▮▮▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▮▯▮▮ ▮▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▮ ▯▮
▯▯▯▮▯▯▯▮ ▯▮▯▮▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▮ ▯▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▯ ▯▮
▯▯▯▮▯▯▯▮ ▯▯▯▮▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▮▯▯▯▯▯▮ ▯▮▯▯▯▮▯▮ ▯▯▯▮▯▯▯▯ ▯▮
01234567 01234567 01234567 01234567 01234567 01234567 01
```