all repos — xyw @ 3520

A minimal virtual machine and assembler for terminals.

examples/lib/macros.xyw

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
;;; Devices

; system
.macro system.state              $00
.macro system.error              $01
.macro system.page               $02
.macro system.random             $03
.macro system.on_error           $04
.macro system.image_exec         $06

; terminal
.macro terminal.input            $10
.macro terminal.output           $11
.macro terminal.on_keypress      $12
.macro terminal.on_argument      $14

; clock
.macro clock.year                $20
.macro clock.month               $22
.macro clock.monthday            $23
.macro clock.weekday             $24
.macro clock.hour                $25
.macro clock.minute              $26
.macro clock.second              $27
.macro clock.timer               $28
.macro clock.on_timer            $2A

; file
.macro file.path                 $30
.macro file.type                 $32
.macro file.size                 $33
.macro file.result               $35
.macro file.length               $37
.macro file.read                 $39
.macro file.write                $3B
.macro file.operation            $3D

; beeper
.macro beeper.pitch              $40
.macro beeper.length             $42
.macro beeper.level              $44

;;; Utilities
.macro MOD DIV POP
.macro LBYTE SWP POP
.macro PUTC terminal.output STB

;;; ASCII Characters
.macro NL $0A PUTC
.macro CR $0D PUTC
.macro SP $20 PUTC

;;; Argument separators
.macro arg.sep $1E
.macro arg.end $1D

;;; Errors

; system
.macro error.system.division_by_zero       $01
.macro error.system.user_stack_overflow    $02
.macro error.system.user_stack_underflow   $03
.macro error.system.system_stack_overflow  $04
.macro error.system.system_stack_underflow $05
.macro error.execution_depth_exceeded      $06
.macro error.system.image_not_found        $07
.macro error.system.image_read_error       $08
.macro error.system.image_too_large        $09
.macro error.system.invalid_opcode         $0A

; terminal
.macro error.terminal_not_tty              $11

; file
.macro error.file.not_found                $31
.macro error.file.access_denied            $32
.macro error.file.invalid_op               $33
.macro error.file.io_error                 $34
.macro error.file.path_too_long            $35
.macro error.file.buffer_out_of_range      $36
.macro error.file.symlink_failed           $37
.macro error.file.exec_failed              $38

; beeper
.macro error.beeper.device                 $41
.macro error.beeper.memory                 $42
.macro error.beeper.playback               $43

;;; File operations
.macro file.op.read    $01
.macro file.op.write   $02
.macro file.op.append  $03
.macro file.op.delete  $04
.macro file.op.copy    $05
.macro file.op.move    $06
.macro file.op.symlink $07
.macro file.op.exec    $08

;;; File types
.macro file.type.unspecified $00
.macro file.type.file        $01
.macro file.type.directory   $02

;;; Beeper notes
.macro ps   $0000  ; pause (no sound)
.macro c4   $0106  ; 262 Hz
.macro cs4  $0115  ; 277 Hz
.macro d4   $0126  ; 294 Hz
.macro ds4  $0137  ; 311 Hz
.macro e4   $014A  ; 330 Hz
.macro f4   $015D  ; 349 Hz
.macro fs4  $0172  ; 370 Hz
.macro g4   $0188  ; 392 Hz
.macro gs4  $019F  ; 415 Hz
.macro a4   $01B8  ; 440 Hz
.macro as4  $01D2  ; 466 Hz
.macro b4   $01EE  ; 494 Hz

.macro c5   $020B  ; 523 Hz
.macro cs5  $022A  ; 554 Hz
.macro d5   $024B  ; 587 Hz
.macro ds5  $026E  ; 622 Hz
.macro e5   $0293  ; 659 Hz
.macro f5   $02BA  ; 698 Hz
.macro fs5  $02E4  ; 740 Hz
.macro g5   $0310  ; 784 Hz
.macro gs5  $033F  ; 831 Hz
.macro a5   $0370  ; 880 Hz
.macro as5  $03A4  ; 932 Hz
.macro b5   $03DC  ; 988 Hz

.macro c6   $0417  ; 1047 Hz
.macro cs6  $0455  ; 1109 Hz
.macro d6   $0497  ; 1175 Hz
.macro ds6  $04DD  ; 1245 Hz
.macro e6   $0527  ; 1319 Hz
.macro f6   $0575  ; 1397 Hz
.macro fs6  $05C8  ; 1480 Hz
.macro g6   $0620  ; 1568 Hz
.macro gs6  $067D  ; 1661 Hz
.macro a6   $06E0  ; 1760 Hz
.macro as6  $0749  ; 1865 Hz
.macro b6   $07B8  ; 1976 Hz