piano.tal (13364B)
1 ( Piano: 2 Play notes with the keyboard or the controller ) 3 4 |00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 5 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 6 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 7 |30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 8 |40 @Audio1 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 9 |80 @Controller &vector $2 &button $1 &key $1 10 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2 11 12 |0000 13 14 @octave $1 15 @center &x $2 &y $2 16 @adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 17 @wave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 18 @octave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2 19 20 |0100 ( -> ) 21 22 ( theme ) 23 #0fe3 .System/r DEO2 24 #0fc3 .System/g DEO2 25 #0f23 .System/b DEO2 26 ( resize ) 27 #0180 .Screen/width DEO2 28 #00e0 .Screen/height DEO2 29 ( find center ) 30 .Screen/width DEI2 #01 SFT2 31 DUP2 .center/x STZ2 32 #0080 SUB2 33 DUP2 .octave-view/x1 STZ2 34 #0050 ADD2 .octave-view/x2 STZ2 35 .Screen/height DEI2 #01 SFT2 #0010 ADD2 36 DUP2 .center/y STZ2 37 #0010 ADD2 38 DUP2 .octave-view/y1 STZ2 39 #0018 ADD2 .octave-view/y2 STZ2 40 ( place adsr ) 41 .center/x LDZ2 #0020 SUB2 .adsr-view/x1 STZ2 42 .center/y LDZ2 #0010 ADD2 .adsr-view/y1 STZ2 43 .adsr-view/x1 LDZ2 #00a0 ADD2 .adsr-view/x2 STZ2 44 .adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2 45 ( place waveform ) 46 .center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2 47 .center/y LDZ2 #0040 SUB2 .wave-view/y1 STZ2 48 .wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2 49 .wave-view/y1 LDZ2 #0040 ADD2 .wave-view/y2 STZ2 50 ( setup synth ) 51 #041c set-env 52 #dd set-vol 53 ;sin-pcm .Audio0/addr DEO2 54 ;sin-pcm .Audio1/addr DEO2 55 #0100 56 DUP2 .Audio0/length DEO2 57 .Audio1/length DEO2 58 ( inital drawing ) 59 draw-octave 60 draw-adsr 61 draw-wave 62 ( unlock ) 63 ;on-frame .Screen/vector DEO2 64 ;on-control .Controller/vector DEO2 65 ;on-mouse .Mouse/vector DEO2 66 ;on-message .Console/vector DEO2 67 68 BRK 69 70 ( 71 @|vectors ) 72 73 @on-frame ( -> ) 74 75 .Mouse/state DEI ?&skip-sft 76 [ LIT2 00 &soft $1 ] EQUk ?&no-soft 77 soften 78 DUP #01 SUB ,&soft STR 79 &no-soft 80 POP2 81 &skip-sft 82 83 [ LIT &last $1 ] .Audio0/output DEI NEQk ?&changed 84 POP2 BRK 85 &changed 86 ,&last STR POP 87 88 ( redraw ) 89 [ LIT2 00 -Screen/auto ] DEO 90 .adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2 91 #1000 92 &loop 93 .adsr-view/x2 LDZ2 #003a SUB2 .Screen/x DEO2 94 ( left ) 95 #10 OVR SUB 96 #00 .Audio0/output DEI 97 #00 .Audio0/volume DEI #04 SFT 98 MUL2 #08 SFT2 NIP LTH .Screen/pixel DEO 99 .Screen/x DEI2k INC2 INC2 ROT DEO2 100 ( right ) 101 #10 OVR SUB 102 #00 .Audio0/output DEI 103 #00 .Audio0/volume DEI #0f AND 104 MUL2 #08 SFT2 NIP LTH .Screen/pixel DEO 105 .Screen/y DEI2k INC2 INC2 ROT DEO2 106 INC GTHk ?&loop 107 POP2 108 109 BRK 110 111 @on-control ( -> ) 112 113 .Controller/key DEI 114 ( octave ) 115 [ LIT "a ] NEQk NIP ?&no-c #30 .octave LDZ #0c MUL ADD play &no-c 116 [ LIT "w ] NEQk NIP ?&no-c# #31 .octave LDZ #0c MUL ADD play &no-c# 117 [ LIT "s ] NEQk NIP ?&no-d #32 .octave LDZ #0c MUL ADD play &no-d 118 [ LIT "e ] NEQk NIP ?&no-d# #33 .octave LDZ #0c MUL ADD play &no-d# 119 [ LIT "d ] NEQk NIP ?&no-e #34 .octave LDZ #0c MUL ADD play &no-e 120 [ LIT "f ] NEQk NIP ?&no-f #35 .octave LDZ #0c MUL ADD play &no-f 121 [ LIT "t ] NEQk NIP ?&no-f# #36 .octave LDZ #0c MUL ADD play &no-f# 122 [ LIT "g ] NEQk NIP ?&no-g #37 .octave LDZ #0c MUL ADD play &no-g 123 [ LIT "y ] NEQk NIP ?&no-g# #38 .octave LDZ #0c MUL ADD play &no-g# 124 [ LIT "h ] NEQk NIP ?&no-a #39 .octave LDZ #0c MUL ADD play &no-a 125 [ LIT "u ] NEQk NIP ?&no-a# #3a .octave LDZ #0c MUL ADD play &no-a# 126 [ LIT "j ] NEQk NIP ?&no-b #3b .octave LDZ #0c MUL ADD play &no-b 127 [ LIT "k ] NEQk NIP ?&no-c2 #3c .octave LDZ #0c MUL ADD play &no-c2 128 ( controls ) 129 [ LIT "z ] NEQk NIP ?&no-dec .octave LDZk #01 SUB SWP STZ &no-dec 130 [ LIT "x ] NEQk NIP ?&no-inc .octave LDZk INC SWP STZ &no-inc 131 [ #1b ] NEQk NIP ?&no-esc #010f DEO &no-esc 132 POP 133 134 ( release ) 135 #00 .Controller/key DEO 136 137 .Controller/button DEI 138 [ #11 ] NEQk NIP ?&cu #3c play &cu 139 [ #21 ] NEQk NIP ?&cd #3d play &cd 140 [ #41 ] NEQk NIP ?&cl #3e play &cl 141 [ #81 ] NEQk NIP ?&cr #3f play &cr 142 [ #12 ] NEQk NIP ?&au #40 play &au 143 [ #22 ] NEQk NIP ?&ad #41 play &ad 144 [ #42 ] NEQk NIP ?&al #42 play &al 145 [ #82 ] NEQk NIP ?&ar #43 play &ar 146 [ #14 ] NEQk NIP ?&su #44 play &su 147 [ #24 ] NEQk NIP ?&sd #45 play &sd 148 [ #44 ] NEQk NIP ?&sl #46 play &sl 149 [ #84 ] NEQk NIP ?&sr #47 play &sr 150 POP 151 152 draw-octave 153 154 BRK 155 156 @on-message ( -> ) 157 158 .Console/read DEI play 159 draw-octave 160 161 BRK 162 163 @on-mouse ( -> ) 164 165 #00 .Mouse/state DEI NEQ #41 ADD ;cursor-icn update-cursor 166 167 .Mouse/state DEI ?on-mouse-touch 168 169 BRK 170 171 @on-mouse-touch ( -> ) 172 173 .Mouse/x DEI2 .Mouse/y DEI2 .wave-view within-rect 174 ?on-touch-wave-view 175 .Mouse/x DEI2 .Mouse/y DEI2 .adsr-view within-rect 176 ?on-touch-knobs-view 177 .Mouse/x DEI2 .Mouse/y DEI2 .octave-view within-rect 178 ?on-touch-octave-view 179 180 BRK 181 182 @on-touch-wave-view ( -> ) 183 184 .Mouse/state DEI #01 GTH ?&paint 185 .Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 186 ( min ) #0010 GTH2k [ JMP SWP2 POP2 ] set-length 187 188 BRK 189 190 &paint ( -> ) 191 192 .Mouse/y DEI2 .wave-view/y1 LDZ2 SUB2 #20 SFT2 NIP 193 .Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 ;sin-pcm ADD2 STA 194 draw-wave 195 #10 ;on-frame/soft STA 196 197 BRK 198 199 @on-touch-octave-view ( -> ) 200 201 .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ?&no-mod 202 .Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP 203 [ #00 ] NEQk NIP ?&no-incr 204 .octave LDZ #03 EQU ?&no-incr 205 .octave LDZ INC .octave STZ &no-incr 206 [ #02 ] NEQk NIP ?&no-decr 207 .octave LDZ #ff EQU ?&no-decr 208 .octave LDZ #01 SUB .octave STZ &no-decr 209 POP 210 ( release ) #00 .Mouse/state DEO 211 draw-octave 212 BRK 213 &no-mod 214 215 .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ?&no-key 216 .Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes-lut ADD2 LDA .octave LDZ #0c MUL ADD play 217 ( release ) #00 .Mouse/state DEO 218 draw-octave 219 &no-key 220 221 BRK 222 223 @on-touch-knobs-view ( -> ) 224 225 .Mouse/x DEI2 .adsr-view/x1 LDZ2 SUB2 #03 SFT2 NIP #03 DIV 226 .Mouse/y DEI2 .adsr-view/y1 LDZ2 SUB2 NIP 227 OVR #04 LTH ?on-touch-adsr 228 OVR #04 GTH ?on-touch-vol 229 POP2 230 231 BRK 232 233 @on-touch-adsr ( knob value -> ) 234 235 STH2 236 ( mask ) #ffff #000f #03 OVRr STHr SUB #60 SFT SFT2 EOR2 237 .Audio0/adsr DEI2 AND2 238 ( value ) #000f STHr OVR LTHk [ JMP SWP POP ] SUB 239 ( shift ) #03 STHr SUB #60 SFT SFT2 ORA2 240 set-env 241 242 BRK 243 244 @on-touch-vol ( knob value -> ) 245 246 SWP #03 SUB INC INC SWP STH2 247 ( mask ) #0f OVRr STHr #60 SFT SFT 248 .Audio0/volume DEI AND 249 ( value ) #0f STHr OVR LTHk [ JMP SWP POP ] SUB 250 ( shift ) #01 STHr SUB #60 SFT SFT ORA 251 set-vol 252 253 BRK 254 255 ( 256 @|core ) 257 258 @play ( pitch -- ) 259 260 DUP #0c DIVk MUL SUB ;draw-octave/last STA 261 DUP .Audio0/pitch DEO 262 #0c SUB .Audio1/pitch DEO 263 264 JMP2r 265 266 @set-length ( length* -- ) 267 268 DUP2 .Audio0/length DEO2 269 .Audio1/length DEO2 270 271 !draw-wave 272 273 @set-vol ( vol -- ) 274 275 DUP .Audio0/volume DEO 276 .Audio1/volume DEO 277 278 !draw-adsr 279 280 @set-env ( adsr* -- ) 281 282 DUP2 .Audio0/adsr DEO2 283 .Audio1/adsr DEO2 284 285 !draw-adsr 286 287 @soften ( -- ) 288 289 #0100 #0000 290 &l 291 DUP2 ;sin-pcm ADD2 get-average SWP2 STA POP 292 INC2 GTH2k ?&l 293 POP2 POP2 294 draw-wave 295 296 JMP2r 297 298 @get-average ( addr* -- addr* average* ) 299 300 [ LIT2r 0000 ] 301 DUP2 #0001 SUB2 DUP2 #0002 ADD2 SWP2 302 &l 303 LDAk LITr 00 STH ADD2r 304 INC2 GTH2k ?&l 305 POP2 POP2 306 LDAk #00 SWP DUP2 DUP2 STH2r 307 #01 SFT2 ADD2 ADD2 ADD2 #02 SFT2 308 309 JMP2r 310 311 ( 312 @|drawing ) 313 314 @update-cursor ( color addr* -- ) 315 316 [ LIT2 00 -Screen/auto ] DEO 317 .Screen/addr DEO2 318 #40 draw-cursor 319 .Mouse/x DEI2 ,draw-cursor/x STR2 320 .Mouse/y DEI2 ,draw-cursor/y STR2 321 322 @draw-cursor ( color -- ) 323 324 [ LIT2 &x $2 ] .Screen/x DEO2 325 [ LIT2 &y $2 ] .Screen/y DEO2 326 .Screen/sprite DEO 327 328 JMP2r 329 330 @draw-octave ( -- ) 331 332 ( arrows ) 333 [ LIT2 02 -Screen/auto ] DEO 334 .octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2 335 .octave-view/y1 LDZ2 .Screen/y DEO2 336 ;arrow-icns .Screen/addr DEO2 337 [ LIT2 01 -Screen/sprite ] DEO 338 ;font-hex .octave LDZ #03 ADD #00 SWP #30 SFT2 ADD2 .Screen/addr DEO2 339 [ LIT2 02 -Screen/sprite ] DEO 340 ;arrow-icns/down .Screen/addr DEO2 341 [ LIT2 01 -Screen/sprite ] DEO 342 ( octave ) 343 .octave-view/x1 LDZ2 .Screen/x DEO2 344 .octave-view/y1 LDZ2 .Screen/y DEO2 345 [ LIT2 06 -Screen/auto ] DEO 346 [ LITr &last ff ] 347 ;keys-left-icns STHkr #00 EQU INC draw-key 348 ;keys-middle-icns STHkr #02 EQU INC draw-key 349 ;keys-right-icns STHkr #04 EQU INC draw-key 350 ;keys-left-icns STHkr #05 EQU INC draw-key 351 ;keys-middle-icns STHkr #07 EQU INC draw-key 352 ;keys-middle-icns STHkr #09 EQU INC draw-key 353 ;keys-right-icns STHr #0b EQU INC 354 355 ( >> ) 356 357 @draw-key ( addr* color -- ) 358 359 STH 360 .Screen/addr DEO2 361 .Screen/y DEI2 362 STHr .Screen/sprite DEOk DEOk DEO 363 .Screen/x DEI2k #0008 ADD2 ROT DEO2 364 .Screen/y DEO2 365 366 JMP2r 367 368 @draw-adsr ( -- ) 369 370 ( adsr ) 371 .adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2 372 .Audio0/adsr DEI #04 SFT draw-knob 373 .adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2 374 .Audio0/adsr DEI #0f AND draw-knob 375 .adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2 376 .Audio0/adsr INC DEI #04 SFT draw-knob 377 .adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2 378 .Audio0/adsr INC DEI #0f AND draw-knob 379 ( volume ) 380 .adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2 381 .Audio0/volume DEI #04 SFT draw-knob 382 .adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2 383 .Audio0/volume DEI #0f AND 384 385 !draw-knob 386 387 @draw-wave ( -- ) 388 389 ( background ) 390 .wave-view/x1 LDZ2 .Screen/x DEO2 391 .wave-view/y1 LDZ2 .Screen/y DEO2 392 ;fill-icn .Screen/addr DEO2 393 [ LIT2 75 -Screen/auto ] DEO 394 #e0 &lbg 395 ;dotted-icn .Screen/addr DEO2 396 [ LIT2 0c -Screen/sprite ] DEO 397 INC DUP ?&lbg 398 POP 399 .wave-view/x1 LDZ2 .Screen/x DEO2 400 ( waveform ) 401 [ LIT2 01 -Screen/auto ] DEO 402 ;sin-pcm/end ;sin-pcm 403 &loop 404 DUP2 ;sin-pcm SUB2 .Audio0/length DEI2 DIV2k MUL2 SUB2 ;sin-pcm ADD2 LDA 405 #00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2 406 ( draw ) DUP2 ;sin-pcm SUB2 NIP .Audio0/length DEI2 NIP #01 SUB GTH INC .Screen/pixel DEO 407 INC2 GTH2k ?&loop 408 POP2 POP2 409 ( length line ) 410 .wave-view/x1 LDZ2 .Audio0/length DEI2 #0001 SUB2 ADD2 .Screen/x DEO2 411 .wave-view/y1 LDZ2 .Screen/y DEO2 412 ;line-icn .Screen/addr DEO2 413 [ LIT2 71 -Screen/auto ] DEO 414 [ LIT2 05 -Screen/sprite ] DEO 415 ( range ) 416 [ LIT2 01 -Screen/auto ] DEO 417 .wave-view/x1 LDZ2 .Screen/x DEO2 418 .wave-view/y1 LDZ2 #0018 SUB2 .Screen/y DEO2 419 .Audio0/length DEI2 420 421 !draw-short 422 423 @draw-knob ( x* y* value -- ) 424 425 STH 426 OVR2 OVR2 .Screen/y DEO2 .Screen/x DEO2 427 ( circle ) 428 ;knob-icns .Screen/addr DEO2 429 [ LIT2 16 -Screen/auto ] DEO 430 [ LIT2 01 -Screen/sprite ] DEOk DEO 431 ( value ) 432 #0010 ADD2 .Screen/y DEO2 433 #0004 ADD2 .Screen/x DEO2 434 ;font-hex #00 STHkr #30 SFT ADD2 .Screen/addr DEO2 435 [ LIT2 00 -Screen/auto ] DEO 436 [ LIT2 01 -Screen/sprite ] DEO 437 ( marker ) 438 .Screen/x DEI2 #0004 SUB2 #0000 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2 439 .Screen/y DEI2 #0010 SUB2 #0000 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2 440 ;knob-icns/index .Screen/addr DEO2 441 [ LIT2 05 -Screen/sprite ] DEO 442 443 JMP2r 444 445 @draw-short ( short* -- ) 446 447 SWP draw-byte 448 449 @draw-byte ( byte -- ) 450 451 DUP #04 SFT draw-hex #0f AND 452 453 @draw-hex ( char -- ) 454 455 #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 456 [ LIT2 02 -Screen/sprite ] DEO 457 458 JMP2r 459 460 @within-rect ( x* y* rect -- flag ) 461 462 STH 463 ( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ?&skip 464 ( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ?&skip 465 SWP2 466 ( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ?&skip 467 ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ?&skip 468 POP2 POP2 POPr 469 #01 470 JMP2r 471 &skip 472 POP2 POP2 POPr 473 #00 474 475 JMP2r 476 477 @phex ( short* -- ) SWP phex/b &b DUP #04 SFT phex/c &c #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r 478 479 ( 480 @|assets ) 481 482 @notes-lut [ 483 30 32 34 35 37 39 3b 3c ] 484 485 @dotted-icn [ 486 0000 0000 0000 0000 487 0000 0000 0000 0000 488 0000 0000 0000 0000 489 0000 0000 0000 0000 490 aa00 0000 0000 0000 491 0000 0000 0000 0000 492 0000 0000 0000 0000 493 0000 0000 0000 0000 ] 494 @line-icn [ 495 8080 8080 8080 8080 496 ] 497 @fill-icn [ 498 ffff ffff ffff ffff ] 499 @cursor-icn [ 500 80c0 e0f0 f8e0 1000 ] 501 @arrow-icns [ 502 0010 387c fe10 1000 503 &down 504 0010 1010 fe7c 3810 ] 505 @keys-left-icns [ 506 7c7c 7c7c 7c7c 7c7c 507 7c7c 7c7c 7c7c 7e7f 508 7f7f 7f7f 7f7f 3e00 ] 509 @keys-middle-icns [ 510 1c1c 1c1c 1c1c 1c1c 511 1c1c 1c1c 1c1c 3e7f 512 7f7f 7f7f 7f7f 3e00 ] 513 @keys-right-icns [ 514 1f1f 1f1f 1f1f 1f1f 515 1f1f 1f1f 1f1f 3f7f 516 7f7f 7f7f 7f7f 3e00 ] 517 @knob-icns [ 518 0003 0c10 2020 4040 519 00c0 3008 0404 0202 520 4040 2020 100c 0300 521 0202 0404 0830 c000 522 &index 523 0000 183c 3c18 0000 ] 524 @knob-offsetx [ 525 01 00 00 00 00 01 02 03 526 05 06 07 08 08 08 08 07 ] 527 @knob-offsety [ 528 07 06 05 03 02 01 00 00 529 00 00 01 02 03 05 06 07 ] 530 @font-hex [ 531 007c 8282 8282 827c 0030 1010 1010 1010 532 007c 8202 7c80 80fe 007c 8202 1c02 827c 533 000c 1424 4484 fe04 00fe 8080 7c02 827c 534 007c 8280 fc82 827c 007c 8202 1e02 0202 535 007c 8282 7c82 827c 007c 8282 7e02 827c 536 007c 8202 7e82 827e 00fc 8282 fc82 82fc 537 007c 8280 8080 827c 00fc 8282 8282 82fc 538 007c 8280 f080 827c 007c 8280 f080 8080 ] 539 540 ( pad ) [ 8080 8080 ] 541 @sin-pcm [ 542 8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad 543 b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7 544 d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4 545 f5f6 f7f8 f9fa fbfb fcfd fdfe fefe fefe 546 fffe fefe fefe fdfd fcfb fbfa f9f8 f7f6 547 f5f4 f2f1 f0ee eceb e9e7 e6e4 e2e0 dedb 548 d9d7 d5d2 d0ce cbc9 c6c3 c1be bbb9 b6b3 549 b0ad aaa7 a4a1 9e9b 9895 928f 8c89 8683 550 807d 7a77 7471 6e6b 6865 625f 5c59 5653 551 504d 4a47 4542 3f3d 3a37 3532 302e 2b29 552 2725 2220 1e1c 1a19 1715 1412 100f 0e0c 553 0b0a 0908 0706 0505 0403 0302 0202 0202 554 0102 0202 0202 0303 0405 0506 0708 090a 555 0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225 556 2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d 557 5053 5659 5c5f 6265 686b 6e71 7477 7a7d ] 558 &end 559 ( pad ) [ 8080 8080 ] 560