	.module shell.c
	.area text
;          ?temp -> -49,x
;          ?temp -> -47,x
;     cmd_length -> -46,x
;            cmd -> -44,x
;           argc -> -43,x
;           argv -> -41,x
;        cursor1 -> -39,x
;              j -> -37,x
;        cursor2 -> -36,x
;        command -> -34,x
;              i -> -1,x
_shell::
	pshx
	tfr s,x
	leas -60,sp
; // shell.c
; 
; 
; #include <912d60.h>
; #include <stdio.h>
; #include <stdlib.h>
; #include <string.h>
; #include <ctype.h>
; #include "kernel.h"
; #include "semlib.h"
; 
; 
; 
; 
; // FUNCTION PROTOTYPES
; void shellcmd_help(char *argv1);
; void shellcmd_tcb(void);
; void shellcmd_rcb(void);
; void shellcmd_ticks(void);
; void shellcmd_start_task(unsigned char id);
; 
; /*void shellcmd_stop_task(unsigned char id);
; void shellcmd_set_task_priority(unsigned char id, unsigned char priority);
; void shellcmd_quit_shell(void);*/
; 
; 
; 
; 
; // GLOBAL VARIABLES
; extern unsigned long int system_tick;
; extern unsigned int current;		   	 	// current task id number
; 
; 
; // LOCAL GLOBAL VARIABLES (context is this file only)
; extern char error_msg[6][25];
; 
; 
; void shell(void) {
; 	
; 	// LOCAL CONSTANTS
; 	#define cmd_size (32+1)
; 
; 	
; 	
; 	// LOCAL ENUMERATIONS
; 	enum command_type {	help = 1,
; 		 			  	tcb, 
; 		 			  	rcb, 
; 						ticks,
; 						start,
; 						stop,
; 						priority,
; 						quit
; 	};
; 						
; 		
; 						
; 	// LOCAL VARIABLES
; 	char command[cmd_size], i, j, **argv, *cursor1, *cursor2;
; 	int cmd_length, argc;
; 	enum command_type cmd;
; 	
; 	
; 	
; 	
; 	// INITIALIZE SHELL
; 	sem_get(COM1);		  // get comm port 1 semaphore
	ldd #0
	jsr _sem_get
; 	INTR_ON();			  // enable interrupts
		cli

	lbra L5
L4:
; 	
; 	
; 	
; 	// SHELL COMMAND LINE INTERPRETER
; 	while (1) {
; 	
; 		  i = 0;
	clr -1,x
; 		  cursor1 = command;
	leay -34,x
	sty -39,x
; 		  cursor2 = command;
	leay -34,x
	sty -36,x
; 		  
; 		  
; 		  // put a PROMPT
; 		  putchar('>'); putchar('>'); putchar(' ');
	ldd #62
	jsr _putchar
	ldd #62
	jsr _putchar
	ldd #32
	jsr _putchar
	bra L8
L7:
; 		  
; 		  
; 		  // GET AND ECHO THE COMMAND on the console
; 		  while (((command[i]=getchar()) != 0xD) && (i<cmd_size)) {
; 		  		putchar(command[i]);
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	clra
	jsr _putchar
; 				
; 				// allow backspace to correct typing mistakes
; 				if (command[i] == 8) {
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	cmpb #8
	bne L10
; 				    putchar(32);  		 // space
	ldd #32
	jsr _putchar
; 					putchar(8);			 // backspace
	ldd #8
	jsr _putchar
; 					command[i] = '\0';	 // null
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	clr 0,y
; 					i--;
	ldab -1,x
	clra
	subd #1
	stab -1,x
; 					} 
	bra L11
L10:
; 				else
; 				  	i++;
	ldab -1,x
	clra
	addd #1
	stab -1,x
L11:
L8:
	jsr _getchar
	stab -47,x
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab -47,x
	stab 0,y
	ldab -47,x
	cmpb #13
	beq L12
	ldab -1,x
	cmpb #33
	lblo L7
L12:
; 		  		}
; 		  // terminate the string
; 		  command[i] = NULL;
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	clr 0,y
; 		  putchar('\n');
	ldd #10
	jsr _putchar
; 		  
; 		  
; 		  
; 		  // PUT COMMAND LINE INTO ARGV & ARGC to extract cmd/args		  
; 		  // make argc and argv arrays according to the command line input
; 		  i = 0;
	clr -1,x
; 		  argc = 1;
	ldd #1
	std -43,x
	bra L14
L13:
; 		  
; 		  // count command + args: argc
; 		  while (command[i] != NULL) {
; 		  		if (command[i] == ' ') 
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	cmpb #32
	bne L16
; 				   argc++;
	ldd -43,x
	addd #1
	std -43,x
L16:
	ldab -1,x
	clra
	addd #1
	stab -1,x
L14:
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	tst 0,y
	bne L13
; 				i++;
; 		  		}
; 		  
; 		  
; 		  // allocate memory to argv
; 		  if ((argv = malloc(argc)) == NULL) {
	ldd -43,x
	jsr _malloc
	std -52,x
	std -41,x
	ldd -52,x
	bne L18
; 		  	 puts(error_msg[5]);
	ldd #_error_msg+125
	jsr _puts
; 			 exit(1);
	ldd #1
	jsr _exit
; 		  	 }
L18:
; 	 
;  
; 		  // extract the cmd/args
; 		  i = 0;
	clr -1,x
	clr -37,x
	lbra L24
X0:
; 		  for (j=0; j<argc; j++) {
L25:
	ldab -1,x
	clra
	addd #1
	stab -1,x
	ldd -36,x
	addd #1
	std -36,x
L26:
; 		  	  
; 			  // search command for letters/numbers
; 			  while (isalnum(command[i])) {
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	clra
	jsr _isalnum
	cpd #0
	bne L25
; 			  		i++;
; 					cursor2++;
; 			  		}
; 			  
; 
; 			  // found a cmd/arg, so make a string array for it
; 			  // must manually add a NULL char to the end
; 		  	  if ((argv[j] = malloc(cursor2 - cursor1 + 1)) == NULL) {
	ldd -36,x
	subd -39,x
	addd #1
	jsr _malloc
	std -54,x
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd -54,x
	std 0,y
	ldd -54,x
	bne L28
; 			  	 puts(error_msg[5]);
	ldd #_error_msg+125
	jsr _puts
; 				 exit(1);
	ldd #1
	jsr _exit
; 			  	 }
L28:
	ldd -36,x
	subd -39,x
	addd #1
	std 2,sp
	ldy -39,x
	sty 0,sp
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd 0,y
	jsr _memmove
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldab -1,x
	clra
	addd 0,y
	xgdy
	clr 0,y
	leay -33,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	std -39,x
	ldy -39,x
	sty -36,x
	ldab -1,x
	clra
	addd #1
	stab -1,x
L22:
	ldab -37,x
	clra
	addd #1
	stab -37,x
L24:
	ldab -37,x
	clra
	cpd -43,x
	lblt L26
; 
; 			  
; 			  // move finding to argv[j] array, and add NULL char
; 			  memmove(argv[j], cursor1, cursor2 - cursor1 + 1);
; 			  argv[j][i] = NULL;
; 			  
; 			  // update cursors
; 		  	  cursor1 = command + i + 1;
; 			  cursor2 = cursor1;
; 			  i++;
; 			   
; 		  	   }  // end for j
; 		  
; 		  
; 		  
; 		  // CLASSIFY THE COMMAND
; 		  if (command[0] == 0xD);	 // CR, so start over
	ldab -34,x
	cmpb #13
	bne L32
	lbra L33
L32:
; 		  else if (strcmp(argv[0], "help") == 0)
	ldd #L36
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L34
; 		  	   cmd = help;
	ldab #1
	stab -44,x
	lbra L35
L34:
; 		  else if (strcmp(argv[0], "tcb") == 0)
	ldd #L39
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L37
; 		  	   cmd = tcb;
	ldab #2
	stab -44,x
	lbra L38
L37:
; 		  else if (strcmp(argv[0], "rcb") == 0)
	ldd #L42
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L40
; 		  	   cmd = rcb;
	ldab #3
	stab -44,x
	lbra L41
L40:
; 		  else if (strcmp(argv[0], "ticks") == 0)
	ldd #L45
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L43
; 		  	   cmd = ticks;
	ldab #4
	stab -44,x
	lbra L44
L43:
; 		  else if (strcmp(argv[0], "start") == 0)
	ldd #L48
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L46
; 		  	   cmd = start;
	ldab #5
	stab -44,x
	bra L47
L46:
; 		  else if (strcmp(argv[0], "stop") == 0)
	ldd #L51
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L49
; 		  	   cmd = stop;
	ldab #6
	stab -44,x
	bra L50
L49:
; 		  else if (strcmp(argv[0], "priority") == 0)
	ldd #L54
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L52
; 		  	   cmd = priority;
	ldab #7
	stab -44,x
	bra L53
L52:
; 		  else if (strcmp(argv[0], "quit") == 0)
	ldd #L57
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L55
; 		  	   cmd = quit;
	ldab #8
	stab -44,x
	bra L56
L55:
; 		  else if (strcmp(argv[0], "") == 0) 
	ldd #L60
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L58
; 		  	   cmd = 0;
	clr -44,x
	bra L59
L58:
; 		  else {
; 		  	   puts(error_msg[1]); 
	ldd #_error_msg+25
	jsr _puts
; 			   putchar('\n');
	ldd #10
	jsr _putchar
; 			   cmd = 0;
	clr -44,x
; 		  	   }
L59:
L56:
L53:
L50:
L47:
L44:
L41:
L38:
L35:
L33:
; 		
; 		
; 		  // CLASSIFY/VALIDATE THE PARAMETERS and DISPATCH the command
; 		  if (cmd) {
	tst -44,x
	lbeq L62
	ldab -44,x
	clra
	std -49,x
	cpd #1
	beq L67
	ldd -49,x
	cpd #2
	lbeq L83
	ldd -49,x
	cpd #3
	lbeq L88
	ldd -49,x
	cpd #4
	lbeq L89
	ldd -49,x
	cpd #5
	lbeq L93
	ldd -49,x
	cpd #6
	lbeq L98
	ldd -49,x
	cpd #7
	lbeq L99
	ldd -49,x
	cpd #8
	lbeq L100
	lbra L65
X1:
; 		  switch (cmd) {
L67:
; 		   		 case help:
; 				 	  if (argc == 1) {
	ldd -43,x
	cpd #1
	bne L68
; 					  	 puts("---HELP---\n");
	ldd #L70
	jsr _puts
; 					  	 puts("<> -- required arguments");
	ldd #L71
	jsr _puts
; 					  	 puts("[] -- optional arguments\n");
	ldd #L72
	jsr _puts
; 					  	 puts("help [cmd] -- help on a specific command");
	ldd #L73
	jsr _puts
; 					  	 puts("tcb [task_id] -- prints task control block");
	ldd #L74
	jsr _puts
; 					  	 puts("rcb [task_id] -- prints resource control block");
	ldd #L75
	jsr _puts
; 					 	 puts("ticks -- shows system tick");
	ldd #L76
	jsr _puts
; 					  	 puts("start <task_id> -- start a task");
	ldd #L77
	jsr _puts
; 					  	 puts("stop <task_id>  -- stop a task");
	ldd #L78
	jsr _puts
; 					 	 puts("priority <task_id>, <task_priority>  -- change prio");
	ldd #L79
	jsr _puts
; 					 	 puts("quit -- quit the shell (carefull!)");
	ldd #L80
	jsr _puts
; 					 	 putchar('\n');
	ldd #10
	jsr _putchar
; 					  	 }
	lbra L65
L68:
; 					  else if (argc == 2) 
	ldd -43,x
	cpd #2
	lbne L65
; 					  	   shellcmd_help(argv[1]);
	ldy -41,x
	ldd 2,y
	jsr _shellcmd_help
; 				  	  break;
	lbra L65
L83:
; 				 case tcb:
; 				 	  if (argc == 1)
	ldd -43,x
	cpd #1
	bne L84
; 				  	  	 shellcmd_tcb();
	jsr _shellcmd_tcb
	bra L65
L84:
; 					  else if (argc > 1)
	ldd -43,x
	cpd #1
	ble L65
; 					  	   puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; 				  	  break;
	bra L65
L88:
; 				 case rcb:
; 				 	  puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; 				  	  break;
	bra L65
L89:
; 				 case ticks:
; 				 	  if (argc > 1)
	ldd -43,x
	cpd #1
	ble L90
; 					  	 puts(error_msg[1]);
	ldd #_error_msg+25
	jsr _puts
	bra L65
L90:
; 					  else
; 				  	  	  shellcmd_ticks();
	jsr _shellcmd_ticks
; 					  break;
	bra L65
L93:
; 				 case start:
; 				 	  if ((argc != 2) || 
	ldd -43,x
	cpd #2
	bne L96
	ldy -41,x
	ldy 2,y
	ldab 0,y
	clra
	jsr _isdigit
	cpd #0
	bne L94
L96:
; 					  	 (!isdigit(*argv[1])))
; 					  	 puts(error_msg[1]);
	ldd #_error_msg+25
	jsr _puts
	bra L65
L94:
; 					  else
; 				  	  	shellcmd_start_task(atoi(argv[1]));
	ldy -41,x
	ldd 2,y
	jsr _atoi
	clra
	jsr _shellcmd_start_task
; 					  break;
	bra L65
L98:
; 				 case stop:
; 				 	  puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; 				 	  break;
	bra L65
L99:
; 				 case priority:
; 				 	  puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; 				 	  break;
	bra L65
L100:
; 				 case quit:
; 				 	  puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; 				 	  break;
; 				 default:
; 				  	  break;
L65:
; 					  
; 		  		}}	  // end switch/if		
L62:
; 		  
; 		
; 		
; 		  // free the argc and argv array memory
; 		  for (i=0; i<argc; i++)
	clr -1,x
	bra L104
L101:
	ldab -1,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd 0,y
	jsr _free
L102:
	ldab -1,x
	clra
	addd #1
	stab -1,x
L104:
	ldab -1,x
	clra
	cpd -43,x
	blt L101
	ldd -41,x
	jsr _free
	ldd #10
	jsr _putchar
L5:
	lbra L4
X2:
; 		  	  free(argv[i]);
; 		  free(argv);
; 		  
; 		  putchar('\n');
; 		  
; 	}  // end while(1)
; 	
; 	
; 	INTR_OFF();
		sei

; 	sem_give(COM1);
	ldd #0
	jsr _sem_give
; 	
; }	// end shell()
L3:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;          argv1 -> 2,x
_shellcmd_help::
; 
; 
; 
; 
; void shellcmd_help(char *argv1) {
; 
; 	 puts(error_msg[0]);
	ldd #_error_msg
	jsr _puts
; }
L105:
	.dbline 0 ; func end
	rts
;             id -> -2,x
_shellcmd_tcb::
	pshx
	tfr s,x
	leas -14,sp
; 
; 
; 
; void shellcmd_tcb(void) {
	ldd #0
	std -2,x
L107:
	ldd #L111
	jsr _puts
	ldd -2,x
	clra
	jsr _get_task_state
	std -4,x
	ldd -2,x
	clra
	jsr _get_task_priority
	std -6,x
	ldd -2,x
	clra
	jsr _get_task_messages
	std 6,sp
	ldy -6,x
	sty 4,sp
	ldy -4,x
	sty 2,sp
	movw -2,x,0,sp
	ldd #L112
	jsr _printf
L108:
; 
; 	 // LOCAL VARIABLES
; 	 int id;
; 
; 	 
; 	 /* ??this takes a while, so treat the printf() as a critical section 
; 	 	in order to get reliable data  */
; 		
; 	 
; 	 for (id=0; id<numtasks; id++) {
	ldd -2,x
	addd #1
	std -2,x
	ldd -2,x
	cpd #3
	blt L107
; 	 puts  ("-----------+----------+-----------+------------+");
; 	 
; 	 //INTR_OFF();
; 	 printf("TaskID: %2d | State: %d | Prio: %3d | Msgs: 0x0%x |\n", id,
; 	 				 	  		 	  			   get_task_state(id),
; 												   get_task_priority(id),
; 												   get_task_messages(id));
; 	 											   }
; 	 //INTR_ON();
; 	 
; 	 puts  ("-----------+----------+-----------+------------+");
	ldd #L111
	jsr _puts
; 	 puts("\nState: 0=idle, 1=pending, 2=running, 3=waiting, 4=finished");
	ldd #L113
	jsr _puts
; 	 puts("Message: [ bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | prio | state ]"); 
	ldd #L114
	jsr _puts
; 	 
; }
L106:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;  lreg1 -> -4,x
;  lreg2 -> -8,x
_shellcmd_ticks::
	pshx
	tfr s,x
	leas -12,sp
; 
; 
; 
; 
; void shellcmd_ticks(void) {
; 	 
; 	 INTR_OFF();
		sei

; 	 printf("Ticks: %ld\n", system_tick);
	ldy #_system_tick
	movw 0,y,-4,x
	movw 2,y,-2,x
	leay 0,sp
	movw -4,x,0,y
	movw -2,x,2,y
	ldd #L116
	jsr _printf
; 	 INTR_ON();
		cli

; }
L115:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;             id -> 3,x
_shellcmd_start_task::
	pshd
	pshx
	tfr s,x
	leas -2,sp
; 
; 
; 
; 
; void shellcmd_start_task(unsigned char id) {
; 
; 	 if (set_task_state(id, pending) == 0)
	ldd #1
	std 0,sp
	ldab 3,x
	clra
	jsr _set_task_state
	cpd #0
	bne L118
; 	  	 printf("task %d started\n", id);
	ldab 3,x
	clra
	std 0,sp
	ldd #L120
	jsr _printf
L118:
; }
L117:
	tfr x,s
	pulx
	leas 2,sp
	.dbline 0 ; func end
	rts
L120:
	.byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'a,'r,'t,'e,'d,10
	.byte 0
L116:
	.byte 'T,'i,'c,'k,'s,58,32,37,'l,'d,10,0
L114:
	.byte 'M,'e,'s,'s,'a,'g,'e,58,32,91,32,'b,'i,'t,55,32
	.byte 124,32,'b,'i,'t,54,32,124,32,'b,'i,'t,53,32,124,32
	.byte 'b,'i,'t,52,32,124,32,'b,'i,'t,51,32,124,32,'b,'i
	.byte 't,50,32,124,32,'p,'r,'i,'o,32,124,32,'s,'t,'a,'t
	.byte 'e,32,93,0
L113:
	.byte 10,'S,'t,'a,'t,'e,58,32,48,61,'i,'d,'l,'e,44,32
	.byte 49,61,'p,'e,'n,'d,'i,'n,'g,44,32,50,61,'r,'u,'n
	.byte 'n,'i,'n,'g,44,32,51,61,'w,'a,'i,'t,'i,'n,'g,44
	.byte 32,52,61,'f,'i,'n,'i,'s,'h,'e,'d,0
L112:
	.byte 'T,'a,'s,'k,'I,'D,58,32,37,50,'d,32,124,32,'S,'t
	.byte 'a,'t,'e,58,32,37,'d,32,124,32,'P,'r,'i,'o,58,32
	.byte 37,51,'d,32,124,32,'M,'s,'g,'s,58,32,48,'x,48,37
	.byte 'x,32,124,10,0
L111:
	.byte 45,45,45,45,45,45,45,45,45,45,45,43,45,45,45,45
	.byte 45,45,45,45,45,45,43,45,45,45,45,45,45,45,45,45
	.byte 45,45,43,45,45,45,45,45,45,45,45,45,45,45,45,43
	.byte 0
L80:
	.byte 'q,'u,'i,'t,32,45,45,32,'q,'u,'i,'t,32,'t,'h,'e
	.byte 32,'s,'h,'e,'l,'l,32,40,'c,'a,'r,'e,'f,'u,'l,'l
	.byte 33,41,0
L79:
	.byte 'p,'r,'i,'o,'r,'i,'t,'y,32,60,'t,'a,'s,'k,95,'i
	.byte 'd,62,44,32,60,'t,'a,'s,'k,95,'p,'r,'i,'o,'r,'i
	.byte 't,'y,62,32,32,45,45,32,'c,'h,'a,'n,'g,'e,32,'p
	.byte 'r,'i,'o,0
L78:
	.byte 's,'t,'o,'p,32,60,'t,'a,'s,'k,95,'i,'d,62,32,32
	.byte 45,45,32,'s,'t,'o,'p,32,'a,32,'t,'a,'s,'k,0
L77:
	.byte 's,'t,'a,'r,'t,32,60,'t,'a,'s,'k,95,'i,'d,62,32
	.byte 45,45,32,'s,'t,'a,'r,'t,32,'a,32,'t,'a,'s,'k,0
L76:
	.byte 't,'i,'c,'k,'s,32,45,45,32,'s,'h,'o,'w,'s,32,'s
	.byte 'y,'s,'t,'e,'m,32,'t,'i,'c,'k,0
L75:
	.byte 'r,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45
	.byte 32,'p,'r,'i,'n,'t,'s,32,'r,'e,'s,'o,'u,'r,'c,'e
	.byte 32,'c,'o,'n,'t,'r,'o,'l,32,'b,'l,'o,'c,'k,0
L74:
	.byte 't,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45
	.byte 32,'p,'r,'i,'n,'t,'s,32,'t,'a,'s,'k,32,'c,'o,'n
	.byte 't,'r,'o,'l,32,'b,'l,'o,'c,'k,0
L73:
	.byte 'h,'e,'l,'p,32,91,'c,'m,'d,93,32,45,45,32,'h,'e
	.byte 'l,'p,32,'o,'n,32,'a,32,'s,'p,'e,'c,'i,'f,'i,'c
	.byte 32,'c,'o,'m,'m,'a,'n,'d,0
L72:
	.byte 91,93,32,45,45,32,'o,'p,'t,'i,'o,'n,'a,'l,32,'a
	.byte 'r,'g,'u,'m,'e,'n,'t,'s,10,0
L71:
	.byte 60,62,32,45,45,32,'r,'e,'q,'u,'i,'r,'e,'d,32,'a
	.byte 'r,'g,'u,'m,'e,'n,'t,'s,0
L70:
	.byte 45,45,45,'H,'E,'L,'P,45,45,45,10,0
L60:
	.byte 0
L57:
	.byte 'q,'u,'i,'t,0
L54:
	.byte 'p,'r,'i,'o,'r,'i,'t,'y,0
L51:
	.byte 's,'t,'o,'p,0
L48:
	.byte 's,'t,'a,'r,'t,0
L45:
	.byte 't,'i,'c,'k,'s,0
L42:
	.byte 'r,'c,'b,0
L39:
	.byte 't,'c,'b,0
L36:
	.byte 'h,'e,'l,'p,0

